1 :
名無し~3.EXE :
2013/02/01(金) 20:56:18.41 ID:smf9IDtL
2 :
名無し~3.EXE :2013/02/01(金) 22:57:56.24 ID:P16cmkUb
ほえ
3 :
名無し~3.EXE :2013/02/02(土) 15:31:42.88 ID:5A0M16UM
PowerShellでXMLファイルのタグ間のスペースや改行を全て削除して1行にしてしまうことは出来るのでしょうか?
4 :
名無し~3.EXE :2013/02/05(火) 01:10:24.76 ID:PPHkdWV+
DOSの「echo off」みたいにコマンド自体を出力させないことは出来ますか?
5 :
名無し~3.EXE :2013/02/06(水) 02:07:58.27 ID:UAu+l7P7
結局いまだに、 UNIX系OS -> ssh/telnet -> windows でログインして powershell をまともに使う方法ってないの?
6 :
名無し~3.EXE :2013/02/07(木) 00:33:44.04 ID:AJ2IePn6
かなり前からPowerShell Serverあるじゃん
7 :
名無し~3.EXE :2013/02/07(木) 07:44:59.62 ID:dZcBLVES
PowerShell Serverで接続して、日本語っつか、 マルチバイト文字列まともに表示できてる? もしできてるなら、やり方教えてちょーだい
8 :
名無し~3.EXE :2013/02/07(木) 21:00:23.26 ID:7/PPpfYU
あー、日本語表示は駄目っぽいかな?
9 :
名無し~3.EXE :2013/02/07(木) 21:54:32.03 ID:dZcBLVES
むー、やっぱダメなんだよね。 自分的には、Windowsいじるのに日本語使えないってのは きつすぎる制限なので… UNIX系OSからの ssh/telnetでマルチバイト文字列表示不可ってのは、 Win8/2012 + PowerShell3.0 + PowerShell Server か、 Win8/2012 + PowerShell3.0 + OS付属の telnetサーバ で修正されてたりしないのかな? 誰か確認した人いる?
>>10 情報ありがと。
残念ながらWin8/2012どっちも持ってなかったりする。
質問の意図は、もしWin8/2012で直ってたら、そのうち 7/2008に
hotfixが来る希望が持てるかも、と思ってのことなのよ。
つか、2012の新機能に sshサーバ機能つけるんじゃなくて
「Powershell Webアクセス機能つけますた!」とか、
相変わらず MS ってずれてるよね。
なんかこの PowerShell Web Access にしても、
たとえば ubuntu上の firefox/chrome/opera辺りから
使ってちゃんと機能するのかな?
具体的にはタブ補完がストレスなく機能するかどうかが気になる。
>>11 タブ補完はできるけど使用制限はいくつかあるみたいだね
technet.microsoft.com/ja-jp/library/hh831417.aspx#BKMK_web
(リンク貼れないのでスキーム削除)
>>11 ちょっと中の人にメールしてみたんだけど
WireEncodingっていうので文字コードの設定はできるよーって言われた
PowerShell Serverのウインドウの 「Other」タブにWireEncodingって
プルダウンメニューがあるからそれで変更してみてってことなんだけど
自分のはコマーシャルユースだからかそういうメニューはなかった
で、ヘルプ見たらレジストリで直接指定できるらしい
↓参考に編集した
ttp://www.powershellmagazine.com/2011/12/27/powershell-linux-to-windows-integration-encoding-problem/ HKEY_LOCAL_MACHINE\SOFTWARE\PowerShellInside\PowerShellServer に
WireEncodingを自分で追加していろいろエンコード指定できる
メールでもらったところによると日本語関係は
UTF-8 → UTF-8
Japanese (JIS) → iso-2022-jp,
Japanese (JIS-Allow 1 byte Kana) → csISO2022JP,
Japanese (JIS-Allow 1 byte Kana - SO/SI) → iso-2022-jp,
Japanese (EUC) → euc-jp
みたいな感じ
自分の場合は「iso-2022-jp」を値としてセットしたら無事日本語ファイル名もlsで表示できるようになったよ
15 :
11 :2013/02/13(水) 01:10:32.62 ID:sKV7QqvQ
>>14 ううううううぅぅうぅっひょーぅぅぅぅうううううう!!!
ありがとー、ありがとー、ありがとー、ありがとー!!!
まじでいけたよ。これでちょっと楽しい PowerShell ライフをすごせるぜ。
環境
server: windows server 2003 R2 SP2 + PowerShell Server 5.0.0.4482 Personal Edition
client: debian squeeze 6.0.6 + openssh-client 1:5.5p1-6+squeeze3
手順
1. サーバ側に PowerShell Server インストール
2. PowerShell Server レジストリの設定
# powershell 起動 -> 下記実行(値として UTF-8を指定)
New-ItemProperty hklm:\SOFTWARE\PowerShellInside\PowerShellServer WireEncoding -PropertyType String -Value UTF-8
3. PowerShell Server Service Restart
4. クライアントから接続、今回はmltermを使用 LANGはja_JP.UTF-8
# "TERM=vt100" はけっこう重要。これで Clear-Hostや方向キーとかが効くようになる
TERM=vt100 ssh -l username ip_address
5. 日本語表示の確認 ↓とかしてみる
Get-Help about_windows_powershell_2.0
ちなみに、v5のPersonal Editionでは、「Other」タブに
WireEncodingプルダウンメニューはありませんでした。
いやでもまじでうれしいわー、ほんとにありがと。
いやまあメールしたのが快挙っていうなら快挙なんだろうけど、素直に中の人褒めてあげてw 夜中の8時にメール出して次の日の午前中には返信くれたんだしさ(日本時間換算で)
ぶった切って悪いが、メモ帳といいPowerShellの-Encodingオプションといい なんでEUC-JPが指定できないんだろうね。 もしかしてSUNを敵対視するMSの戦略なのかな?
ほぼすべてのUNIX系OSは UTF-8へ移行済みなんだから、 その考え方は違うんじゃないの? まだ単に MSKKが頑張らなかったって方が説得力あるわ。 まぁでも、古いOSが残ってて実運用上困るっていうか めんどくさいのはわかるんだけどさ。
-Encodingは単に、System.Text.Encodingクラスでよく使う?文字コードが静的メンバになってるから じゃあうちらもそれに倣ってとりあえずそれだけ対応しとくかー、的なノリだと思う 以前Connectにもっと増やしてって要望は出したけど、ユーザーの需要は低かったよ
さっきPowerShell Server V6が出てるのに気がついてPersonal Edition入れてみた。
PowerShell 3.0対応はやっぱありがたい。
>>14 んで、"Other"タブ -> Additional Settings -> Text Encoding で Encodingの
設定できるようになってるから、V6のことだったっぽいね。
PowerShell Server
http://www.powershellserver.com/order/
あるフォルダに文字コードがSJISとUTF8のテキストファイルが複数あり そのファイル名と文字コードを一覧表示しようとしていますが gci c:\tmp *.txt | select name でファイル名は表示できたのですが、文字コードの表示の仕方がわかりません…
少なくとも標準でそういう機能はない nkfなりなんなり拾って来ないと
>>24 そうなのですか…
実はUTF8の方は1バイト目がFE、2バイト目がFFで始まるということが判明したので
これで何とか出来ないか調べていたのですが、私にはハードルが高すぎましたw
もう少しググってみます。
X日以上前のファイルを消したいのですが $file_listが空の場合にCreationTimeで MethodCountColudNotFindBestエラーが発生します。 空なのになぜforeachの中に入っていくのですか? $file_list = Get-ChileItem DIR -Recurse foreach( $file in $file_list ){ $diff = ((Get-Date) - $file.CreationTime).Days }
CSVファイルをconvertfrom-csvでオブジェクト化して sort-objectで1列目と2列目をキーに並べ替えてるのだけど 「1列目で昇順かつ2列目で降順」みたいに列毎に 異なるソートオーダーを指定するにはどうすればよいのでしょうか?
昇順ソートして逆にしたい列だけ頭から入れ替えて配列に入れてもっかいCSVにすりゃいいんじゃないですかね 列ごとにソート入れ替えて構造ぶっ壊すことに何の意味があるんだか知らんけど
>>28 Sort-Object @{E="1列目キー名";Ascending=$true},@{E="2列目キー名";Descending=$true}
みたいな?
>>26 それPowerShell2.0までの仕様
3.0では直ってる
>>29 言ってる意味がよくわからんとです…
>>30 出来ました!ありがとうございます!
ググっても全然わからなかったので助かりました。
gci -r | Sort-Object @{E="directoryname";Ascending=$true},@{E="lastwritetime";Descending=$true}
あるサイトで見かけたんだけど、Get-Contentでファイル内容取得する時に (gc a.txt) -ne "" って書くと空行を除外出来るんだね。 他にも面白い書き方ってあるのかな?
気がついたら、過去の異物のようなスクリプトになったよな。 色つきでファイル一覧出すようにいろいろやったら、ファイルにリダイレクトできないとか、なんだよこれ的な。
>>32 のは
gci -r | Sort @{E="directoryname"},@{E="lastwritetime";D=$true}
でもいけるな。
最近どれだけ短縮できるか試すのが趣味になってきたw
get-helpもhelpでいけるし、些細だがオプションの-fullも-fulでいける。
スクリプトファイル(拡張子ps1)を実行した時に開くPowerShellのウインドウを最前面固定表示させる方法はあるのしょうか? もしくはスクリプトファイル内のコードでメッセージボックスを表示してそのメッセージボックスが最前面固定表示されるということでもよいのですが?
SetForegroundWindow
38 :
36 :2013/03/24(日) 09:30:43.67 ID:qAYOPSLY
>>37 ありがとうございます。その関数名でググって以下のコードを実行しましたが
スタートボタン右側のPowershellのアプリアイコンが点滅するだけで
最前面に出てこないようです、ぐぬぬ…
(ちなみに実行したらすぐ他のアプリを最前面に出し、3秒後にPowershellのアプリが最前面に出てくるかを試しました)
もう少し調べてみます。
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Tricks {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@
$h = (Get-Process -id $pid).MainWindowHandle
sleep -sec 3;
[Tricks]::SetForegroundWindow($h)
//Form1.cs Form2 f = new Form2(); f.Owner = this; f.TopMost = true; f.Text = "Alarm Clock"; f.GetOtherFormTextBox(); f.Show();
C#でプログラム作ったほうが手っ取り早くないか?
これ興味あるんだけど、まだぜんぜん勉強してない。 見た感じ、JavaScriptにちょっと似てる気がするんだけど、JavaScript使いなら取っ付きやすいかな? それにしても、Unixのシェルとはまったく似ても似つかないシェルですね。
Shell+Perl みたいなもんかな。
とりあえずPerl知ってりゃ、解説書読みながらすぐ書ける
でも、結局ちょっと突っ込んだことやろうとすると.netの知識が必要になるし、
プログラム言語としては、コーディングしながらエラーも表示してくれるVS+C#で、
http://dobon.net/vb/dotnet/index.html 見ながらの方が手っ取り早いことがわかった。
UnixでC/C++使ってたときは補助的にシェルスクリプトが必須だったが、 WindowsだとC#だけでほぼ事足りるかな? いつまでたってもVSで開発環境できないし。
良さが伝わらなかったか。残念。
PowerShellServerって何が出来んの
Visual StudioにPSも取り込まれるって話なかった?
そもそもなんでVSやC#が出てくるのか意味不明なんだが なにをやろうとしてんの?
【速報】ついに俺氏が重い腰を上げてPowerShellはじめる
>>48 開発環境としていろんな支援があるVSの話が出てきても悪くないだろ
C#は.netの主力開発言語、PSにしたって結局.net上で動いて、ちょっと凝ったことをやりたきゃ
.netのライブラリ使う羽目になるだろ。それだったらコンパイルの手間は要るけどはじめからC#使っても同じってこと。
実際PSで作りだめたスクリプトをC#に移植したわ。PSのファイルに"[]"を含む場合のバグ問題もなく実にスンなり移植できた。
これだけ.netのライブラリが豊富だとシェルスクリプト持ち出してくる必然性があんまないんだな。
Perl使ってるときスクリプト言語特有の連想配列とか便利だなと思ったけど
C#でもハッシュテーブル使えるしな。
コマンドプロンプトと同じく、プログラム未満のコマンドラインとしての存在意義はあると思うけどさ。
客先常駐とかで仕事してるとps1ファイルを実行できるように権限変えることが出来なかったりするからな。 結局ISEにコード貼り付けて実行したりbatファイルと組み合わせたりしてる。
Import-Csv -Path hoge.csv | Sort-Object { [int]$_.pk1,$_.pk2 } みたいな事を、{ [int]$_.pk1,$_.pk2 } の部分を動的に指定するにはどうすればよいでしょう? 型変換不要ならば、 $sortKeys = @( 'pk1','pk2' ) Import-Csv -Path hoge.csv | Sort-Object -Property $sortKeys の様な感じにすればできるんですが。
>>52 数値列をゼロ埋めで桁数固定にして文字として扱えば型変換不要だがどうよ?
ってダメだろうなあ…w
>>53 ありがとうございます。
結局、ForEach-Objectで個別に型変換して対応しました。
ちょー省略すると、
$sortKeys = @( 'pk1','pk2' )
Import-Csv -Path hoge.csv |
ForEach-Object -Process {
$_.pk1 = [int]$_.pk1 # <- 本当は整数型にすべきカラムを判定して変換している
$_
} |
Sort-Object -Property $sortKeys
みたいな感じです(^^;
Get-Counterってプロセスの増減を取得できないんですかね? $s = {$($(Get-Counter "\Process(*)\% Processor Time").CounterSamples).Count} $o = Start-Process notepad -PassThru &$s $o | Stop-Process &$s #←減った分がとれない
56 :
名無し~3.EXE :2013/05/02(木) 17:08:05.20 ID:zjmPKOf6
XP機を根絶できたので、今後のスクリプトはPowerShellに移行するぜ、 と意気込んでいたのに、拡張子が実行に関連付けられていないだの、 セキュリティポリシーの変更が必要だの、使わせる気ないのか それならばと標準入力から喰わせてみたんだが、なぜかスクリプトの 一部が実行されたりされなかったり挙動がよくわからん 下のスクリプトを"-Command -"オプションでリダイレクト入力した場合 f2()を途中改行せずに1行にするか、#以降の末尾に改行を2つ以上 書くかしなければ、出力結果が"1 2"で止まってしまって"3"が出ない これはバグなのかそれとも仕様? Win8Pro64bitで確認、確かWin7のPowerShell3.0でも同じだったと思う Write-Host 1 function f1() { } Write-Host 2 function f2() { } Write-Host 3 #
57 :
56 :2013/05/02(木) 18:18:11.23 ID:zjmPKOf6
半日かけてようやく実行可能なバッチファイルが書けたわw これで心置きなくPowerShellの学習を始められるというもの PSの文法とかまだヌルい所があるはずなので添削求む それか他にも同じようなことしてるblogとかないですかね? @(":", "`""<#") 2>NUL @POWERSHELL -Command - <%0 @EXIT /B #>)|%{} Write-Host "Hello world!"
あ、終了コード戻すの忘れてた 3行目 @EXIT /B %ERRORLEVEL%
あるソフトウェアのインストール前後でレジストリのどこに変更があったかをPowerShellで表示することはできますか?
放置よろ
62 :
名無し~3.EXE :2013/05/15(水) 00:15:29.62 ID:/++F9Bvl
はっきりいってPowerShellは非Win環境でこそ本領発揮できるかもしれん コマンド環境で結局.metの上にのってりゃ未来永劫DOSの代わりにならんし 非Win環境でもバーチャル環境で動くなら同じだけどな. 言語としてとってもいいとおもうけど .net のライブラリがあまりに豊富すぎて補助言語として頼ることもあんまりない
PowerShellはCOOL
すみません質問があるのですが、前スレの
>>436 に
>ps1の実行には必要でもps1を読んで実行する分には必要ない
という記述があり、ExecutionPolicyがRestrictedのままでも
ps1ファイルを実行する手段があるかのように受け止められるのですが
そのような方法があるのでしょうか?
っ PowerShellコマンド
68 :
65 :2013/05/23(木) 00:28:50.12 ID:wUd2eF9W
>>67 ありがとうございます。こんなことが出来るのですね。
今日試しましたがschtasksの/trにこのまま書いたら
スケジュールした時刻にバッチリ動きました。
でもこれじゃExecutionPolicyの意味ないんじゃ…w
ぷっ
攻撃者がすでに対象のPCにログインしている状況なら、わざわざ実行ポリシー変更してどうこうしないよ
?
PowerShellをエクスプローラからダブルクリックで起動すると、コマンドプロンプトの画面になってしまうのですが、 ランチャツールからの起動でもブルーの画面を出すにはどうすればいいでしょうか?
ショートカットを起動すりゃいいよ
75 :
名無し~3.EXE :2013/06/14(金) 19:54:49.02 ID:O/HHNdcE
>>73 表示された画面左上のプロパティで好きな色変えたら?
次に起動するときには変わってるよ。
コマンドプロンプト画面じゃなくてコンソールプログラム画面ね。
Windows 8.1 Preview インスコしたら PowerShell が Version 4.0 になっててびっくりした。 とりあえず Update-Help した。
一般ユーザでpowershellのコンソール開いて、 そこからコマンドで権限昇格することってできないんでしょうか? (linuxのsuコマンドのように) 調べてはみたんですが方法がみつからなくて。。 コマンドで『管理者として実行』の状態にしたいんです。
そんなことができるとでも?
-Credentialつけるんじゃだめなんか
なんでそうしたいのか書いた方が別の解決策を教えてもらえるかも
82 :
78 :2013/08/05(月) NY:AN:NY.AN ID:We+ZS8Ar
レスありがとうございます。
>>80 調べてみます。
>>81 ただ単純に「マウスを使わずにできないのかな?」って思っただけでした。。
別ウィンドウで良ければ$pshome\powershell.exe -verb runas で
>>83 失敗した。
start-processつけないと。
> function su {start-process $pshome\powershell.exe -verb runas}
> su
こんな感じかな。
85 :
78 :2013/08/08(木) NY:AN:NY.AN ID:iLDShGTk
>>84 ありがとうございます!
やってみました。
こんな方法もあったんですね。
正規表現についてお聞きしたいのですが以下はなぜTrueになるのでしょうか? 「数字、文字、数字」という並びがないとTrueにならないと思うのですが? PS C:\> $("123abc") -match "\d\w\d" True
「\w」は文字ではなく単語なので数値も含んでます故
>>87 単語なのに数値も含むとは知りませんでした!
確かに「$("1") -match "\w"」でもTrueになりますね。
ご教授ありがとうございます。
Poweshellは正規表現が強力みたいだけど コマンドプロンプトで「"AAA"で始まるか又は"CCC"で終わり、かつ"BBB"を含む」行を "C:\Temp"フォルダ内(サブフォルダ含む)の全テキストファイルから検索して表示する場合 findstr /s /r /c:"^AAA" /c:"CCC$" "C:\Temp\*.txt" | findstr /r /c:".*BBB" みたいな正規表現によるOR検索とAND検索の組み合わせ検索をよくやるんだけど これって簡単にPowershellに書き換えられるの?
>>89 findstrに相当するのはselect-stringですね。
gci C:\temp -filter "*.txt" -recurse | % {select-string "^AAA.*BBB|BBB.*CCC$" $_.fullname -encoding default}
という感じでどうでしょうか。
>>90 なるほどこんなに簡単に書けるんだね。
-encodingオプションあるのか!これならUTF8とかも検索できるし便利だなあ。
勉強になりました。どうもサンクスです。
http://tech.aainc.co.jp/archives/643 ↑に住所にマッチする正規表現があったので↓のスクリプトを書いてみたのですが、実行するとエラーになります。
何か使えない文字があるのでしょうか?
「ccc 東京都千代田区永田町1−7−1 ddd」という結果を得たいのですが?
$a="aaa 東京都千代田区永田町1−7−1 bbb"
$a -replace "(([^"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^\s\w\d ]{2}県)[^\s\w\d ]{1,6}[市郡区町村][^\s\w\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '"<)」】]*))",'ccc $1 ddd'
>>92 ダブルクォート中にダブルクォートが入ってるから「`」でエスケープ
あとPowerShellは「\w」が半角英数字以外にもマッチするから「A-Za-z」とかに変える必要がある
面白そうなのでやってみた > $a="aaa 東京都千代田区永田町1−7−1 bbb" > $regex = [regex]"(([^`"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^\s\w\d ]{2}県)[^\s\w\d ]{1,6}[市郡区町村][^\s\w\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '`"<)」】]*))" > $regex.Match($a).Success False > $regex = [regex]"(([^`"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^a-zA-Z\s\d ]{2}県)[^a-zA-Z\s\d ]{1,6}[市郡区町村][^a-zA-Z\s\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '`"<)」】]*))" > $regex.Match($a).Success True > $regex.Match($a).Result("ccc `$1 ddd") ccc 東京都千代田区永田町1−7−1 ddd Wordはマルチバイトでもおkと。なるほど。
95 :
92 :2013/08/18(日) NY:AN:NY.AN ID:xIR2OqWI
>>93 ありがとうございます。正規表現は言語によって微妙に「\w」とかの意味が変わるんですね。
エスケープの仕方も知りませんでした…
>>94 試して頂いてありがとうございます。こんな書き方も出来るんですね。
申し訳ありませんが、まるっとコピーさせて頂きました(笑)
visual studio2012のコマンドラインツールのpowershell用セットアップスクリプトはMicrosoftから出ているのでしょうか? powershellからmabuildやguidgenなどのコマンドラインツールを使いたいのですが設定方法がわかりません コマンドプロンプト用の設定スクリプトをpowershellで実行しましたがうまく行きませんでした
>>96 $env:path+=";C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5"
set-alias guiden "C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\guidgen.exe"
set-alias msbuild "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
としておけば
guiden
msbuild
と入力するだけで使えると思います。
msbuildはテスト出来なかったので環境変数の使い方
testという環境変数を作り、値を"aaaa"とします。
PS C:\> New-Item -Path env:test -Value "aaaa"
環境変数testに"bbbb"を代入します。
PS C:\> $env:test="bbbb"
PS C:\> $env:test
bbbb
環境変数testに"cccc"を追加します。 ($env:test+="cccc"と書いても同じです)
PS C:\> $env:test=$env:test + "cccc"
PS C:\> $env:test
bbbbcccc
環境変数testを削除します。
PS C:\> Remove-Item env:test
PS C:\> $env:test
PS C:\>
なお、環境変数やエイリアスはセッション終了(PowerShell終了)とともに消えます。
マイドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 に書いておけばPowerShell起動の度読み込んでくれます。
>>97 ありがとうございます
cmd用に書かれた設定スクリプトをそのまま再利用出来ないのは不便ですね
powershellで1からやるならいいんだろうけど 環境変数設定batすら動かないとやる気なくすよなあ
機械的に書き直せると思うけど、それも面倒なら 設定スクリプトの一番最後でPowerShellスクリプト呼び出せばいいんじゃない?
>>100 vcvarsall.batはbatにしちゃ長いし書き直しもそれなりに面倒
まったく同じことやるだけなのにわざわざ直す時間が惜しいという感覚はあるだろ
なに?そのPowerShellスクリプトをどうやって新たにつくるわけ?
>>101 いやvcvarsall.batがどうなってるのか持ってないから知らんけどね
基本set ほげほげ=ふがふが を機械的に $env:ほげほげ=ふがふがに置き換えればいいと思うけど
で、それも面倒ならvcvarsall.batの一番最後でスクリプト呼び出すなり
cmdでvcvarsall.bat呼び出した後にpowershell起動するなり
やりようはあると思うよ
もちろん必要なのはパス部分の数行だけど まんまそのまま完全に使えるスクリプトがあるのに 小細工や機械的に書きなおす手間が面倒だって言ってんだけど噛み合ってないよね 無理に移行する価値があるのかも疑問だし ってかちょっと強引な押し売りとか宗教の勧誘の手法みたいなところあるよね? たいしてやる気がない人に押し付けてこなくていいから
104 :
99 :2013/09/15(日) 23:38:47.55 ID:56qbimk1
ってか
>>98 >>99 この2週間の間に
>>98 に提案して欲しかったなあ
俺は茶々で特に積極的にやってるわけじゃないからレスされても困惑
よく分からんがPowerShellスレで聞かれたことに答えるのは押し売りなのか・・・
bat再利用したいならPSから喚び出しゃいいだろ コードそのまま置換したってパイプラインもPSObjectも.netも使わないならヤる意味が無い
リモートでLAN内のPCをスリープさせたいと思って [sleep.ps1] $signature = @" [DllImport("powrprof.dll")] public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent); "@ $Sleep = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetSuspendStateFunction" -passThru 'スリープします。' $Sleep::SetSuspendState($false,$false,$false) 上記のスクリプトをInvoke-Commandで呼び出すことにしました。 $SO = New-PSSessionOption -OperationTimeOut 1000 -OpenTimeout 100 -CancelTimeout 100 -IdleTimeout 100 Invoke-Command 対象PC名 .\sleep.ps1 -SessionOption $SO 結果、対象PCは無事にスリープしてくれるのですが、 リモート サーバーからのデータの処理が失敗し、次のエラー メッセージが返されました。 (中略) + CategoryInfo : OperationStopped: (System.Manageme...pressionSyncJob:PSInvokeExpressionSyncJob) []、 PSRemotingTransportException + FullyQualifiedErrorId : JobFailure というエラーが出ます。 なんとかしてスクリプトを正常終了させたいのですが、 Try-Catch文を使う以外に、なにか方法はないでしょうか?
>>107 リモートジョブにして結果を受け取るのではだめでしょうか。
# 管理者モードで
> Enable-PSRemoting
# 非ドメイン環境だと必要らしいのだが、よくわかっていない。*でも良いのだがIPアドレスを入れてみた
> set-item wsman:\localhost\Client\TrustedHosts -Value 127.0.0.1
> set-item wsman:\localhost\Client\TrustedHosts -Value 192.168.11.2
# PC1台のため、ループバック
> $Session = New-PSSession -ComputerName .
# 何となく.netのライブラリを使ってみる
> $test = { [void][Reflection.Assembly]::LoadFrom("C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll")
>> $State=[Windows.Forms.PowerState]"Suspend"
>> [Windows.Forms.Application]::SetSuspendState($State,$False,$False) }
# -AsJobでリモートジョブにしてみる
> Invoke-Command -Session $session -ScriptBlock $test -AsJob
# 画面が真っ暗で電源ボタンが点滅だが・・・スリープなのかな?
# 電源オン
> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 RemoteJob Running True localhost ...
# 結果受け取り
> Receive-Job -Id 2
True
>>108 確かにAsJobスイッチ付ければエラーは出ませんでした。
Invoke-Commandした後にRemove-Jobできれいに終了したことになるんですかねぇ。
なんにせよ、とても丁寧なレスありがとうございました。
>>109 (訂正)
[void][Reflection.Assembly]::LoadFrom("C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll")
は
$dllpath = @(gci (join-path ${env:\windir} "Microsoft.NET\Framework") System.Windows.Forms.dll -recurse | sort -descending fullname)[0].fullname
[void][Reflection.Assembly]::LoadFrom($dllpath)
とかした方がいいですね。
それはともかく、ちゃんとJob内の処理が終わったかどうか判断しないとRemove-Jobするのはまずいので、
クライアントがスリープ後JobのStateがRunningじゃなくなるのなら、
Get-Job | % {Receive-Job -Id $_.Id -Wait -AutoRemoveJob}
Runningのままだったら、エラーメッセージの受け取りを完了とみなして、
Get-Job | % {if ((Receive-Job -Id $_.Id -Keep) -ne $Null) {Remove-Job -Id $_.Id}}
を何回か時間をあけて繰り返すかでしょうか。
上の方はループしそうな感じですが。。。
では。
vbaから自身のexcel.applicationインスタンスを引数にしてps呼び出ししたいのだけどなにかいいやり方はないかな?
VBAからCOMオブジェクトとしてExcel操作するPSスクリプト呼び出すんじゃだめなの?
V3がインストールできません(T_T) x86win7で.NET4もインストールしたのに…
SP1入れてないとか?
4.5入れたらインストール出来ました
Powershell2.0でのCSVファイルの読み込みで質問です。 例えば、↓のような構成のCSVを読もうとしたとき #あ行 あいうえお #か行 かきくけこ #さ行 さしすせそ 以下のように読み込んだところ、なぜか1行目を取得できませんでした。 $header = "ひらがな" $Hiragana_List = Get-Content "C:\test.csv" | ConvertFrom-CSV -header $header 確認したところ、先頭行も「#」を削除すると読み込まれるようになりました。 ConvertFrom-CSVのヘルプなど参照しましたが、この現象について説明している部分は見受けられませんでした。 当現象について説明されているドキュメントまたはサイトをご存知の方がいましたら ご教示願います。
すみません。CSV コメント行 で検索したらいっぱい出ました。スレ汚し失礼しました
118 :
名無し~3.EXE :2013/10/08(火) 11:34:29.70 ID:UAolPLty
wshでのbatとしての起動で先頭に下みたいなん書いといたら出来るのあるでしょ。 @if(0)==(0) ECHO OFF CScript.exe //NoLogo //E:JScript "%~f0" %* GOTO :EOF @end これみたいなんをpowershellでも出来る? ようは1ファイルで収めたいのです。起動用バッチとps1ファイルと2個にしたくない。
まずなんでbatからps1開くなんて頭悪いことしたいのかわかんないけどできるよ
120 :
名無し~3.EXE :2013/10/09(水) 06:10:45.47 ID:55JWwc0D
>>119 ダブルクリックで実行したいのよ。
作ったのを配布するでしょ。配布された人がダブルクリックで実行出来れば簡単かなって。
やり方を教えてください。
何もしなくてもダブルクリックから動くだろ
122 :
名無し~3.EXE :2013/10/09(水) 07:30:23.62 ID:55JWwc0D
>>121 デフォだとpolicy変更しないと動かないんじゃ?
動くよ
124 :
名無し~3.EXE :2013/10/09(水) 08:33:44.01 ID:55JWwc0D
メモ帳で開いたけど…
>>120 そんなことならbatに記述するよりPowerGUIでexeコンパイルしたほうが楽
ポリシー設定気にしないで済むしモジュールも入れちまえばあれこれ気にしないで済む
126 :
名無し~3.EXE :2013/10/09(水) 17:06:37.29 ID:55JWwc0D
>>125 こんなのもあるのかありがとう!!
一応こんなんでやりたいことは出来たから書いとくね。
hoge.cmd とかで保存してダブルクリックで実行。
@if(0)==(0) ECHO OFF
pushd "%~dp0" > nul
for /f "usebackq skip=10 delims=" %%i in ("%~f0") do @echo %%i >> "%~n0.ps1"
powershell -NoProfile -ExecutionPolicy unrestricted -File "%~n0.ps1" %*
del "%~n0.ps1"
popd > nul
pause
GOTO :EOF
@end
# この下にpowershell書く
gci
127 :
名無し~3.EXE :2013/10/16(水) 22:45:15.78 ID:Ulm1Ns5o
powershell.exe -File test.ps1 と実行した時に、スクリプト内で発生したエラーは 標準エラー出力に吐かれます?
別のプロセスが実行してるのでもちろん入らない
僕は入ってますかね
来たか
違いは?
配下に何階層ものフォルダ構造を持つ巨大フォルダ(例えば「C:\hoge」)があるとします。 この「C:\hoge」を指定してその配下の全フォルダのそれぞれのサイズを表示するコマンドって PowerShellなら簡単に実現できるものなのでしょうか?
2秒で書けるよ
質問! PowerShell2.0使っています。 文字列hogeの前後にSとEを付け加える処理を正規表現で行うと結果がおかしくなります。 バグなのでしょうか?なぜこのような結果になるか教えてください >[regex]::replace("hoge", "(.*)", "S`$1E") ShogeESE
"^(.*)$" ですな
何故そうなるのかはわかりません マイクロソフトにお問い合わせ下さい
回答ありがとうございます
Pythonでも試してみましたが、期待通りの結果になります
>>> import re
>>> re.sub(r"(.*)", r"S\1E", "hoge")
'ShogeE'
バグだろうという回答も無いので、みなさんがお使いであろうPowerShell3.0でも
同様の結果なのだと推察します。
>>136 さんの書き方でやっていこうと思います。
ありがとうございました。
>>135 のうちのV2でもなる
置換した戻り値でもう一回正規表現判定してるってことかね変なの
てか.Netよく分からないんだけど$1の前に`付いてるのってこういう文法なの?
ヘルプとか見つからないんだけどどこ行けば見られますか?
>>140 ,141
うわあありがとう
>>140 の.netの方は辿り付けたんだけどこれ自力じゃ絶対気付けなかったわ
正規表現とPSでエスケープが違うってことなのか…
>>140 の詳しい説明見てようやく理解できました。詳しくありがとう
わたしてんのはあくまで「正規表現の文字列」だからな その文字列を生成するPSと正規表現でエスケープは違って当然 インラインでC#書いたりVBS書いてWSHに渡すとか.batにオプションつけて呼び出すとか するときも当然渡す相手の文法で渡してやらないといけない
$DataGridView1.add_SelectionChanged({}) $DataGridView1.add_RowsRemoved({}) ってふうに持ってるイベントに.add_つければなんでもいいみたいだな Register-ObjectEvent でドツボにはまったから助かった
アンダーバーはダサいからAdd-***Eventってラッパーを自動生成するように仕込んでる
しかしなんで「発見」せなあかんのや? DataGridViewの仕様なんてわざとややこしくしてると思われてもしゃーない
ややこしく、というより手抜きだな クリップボードなんかみてるとそう思う
秀丸で書いて秀丸からps1を実行したいんだけど、PowerShellウインドウ出ない(hiddenでプロセスが残らない)方法あるかなぁ
もっとスマートにしたいところ function Open-Explorer($dir) { $p1 = New-Object Diagnostics.Process $p1.StartInfo.FileName = "explorer.exe" $p1.StartInfo.Arguments = "/e,"+$dir $p1.StartInfo.WindowStyle = [Diagnostics.ProcessWindowStyle]::Normal if($p1.Start()) { $p1.PriorityClass = [Diagnostics.ProcessPriorityClass]::Normal } }
業務で英語版Windows 8.1(PowerShell 4.0)を使用していますが、
PowerShellでUTF-8の日本語が文字化けしてしまうので相談させていただきます
文字コードに関しては $OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8"); で変更できましたが、
フォントを英語専用フォントから日本語対応フォントに変更することが出来ずに日本語の文字が表示できていません
【既に試した方法その1】
> $psise.Options.FontName = 'ms gothic'
↓実行結果
> The property 'FontName' cannot be found on this object. Verify that the property exists and can be set.
> At line:1 char:1
> + $psise.Options.FontName = 'ms gothic'
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidOperation: (:) [], RuntimeException
> + FullyQualifiedErrorId : PropertyNotFound
【既に試した方法その2】
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont の値を変更する
参考:
http://dusan.kuzmanovic.net/2012/05/02/powershell-adding-more-fonts/ http://www.fine-view.com/jp/zatsugi/editor_console.html →いずれも失敗
【備考】
システムロケールを日本語(Shift-JIS)に変更すると、
http://opcdiary.net/wp-content/uploads/2012/10/SnapCrab__2012-10-26_22-2-13_No-00_thumb.png PowerShellやcmd.exeの起動時のフォントがMS ゴシックに変更され、
Shift-JISの日本語を表示することはできるようにました。しかしUTF-8は文字化けして表示できません
この状態で
$OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8");
を実行して文字コードが変更されたことを確認してUTF-8の文字列を表示させましたが、
「UTF-8の文字をShift-JISとして解釈した場合に起きる文字化け」が起きてUTF-8の文字は表示できませんでした
ファイル名処理で[]があると誤動作する問題は解決したのかな? C#だと何の問題もなかった
>>150 結果だけ確認できればいいならリダイレクト使え
リダイレクトなら文字コードの設定さえ合ってればフォントがおかしくてもきちんと出力できる
起動時のフォントをMeiryo系に変えたらどうかなぁ
基本chcp 65001でそれなりに動いた気がするけど Ver4はしらね
PowerShell >dir | clip.exe は文字化けするね
これで直った。 1日半かかった。 PS C:\> $OutputEncoding = [console]::OutputEncoding; PS C:\> $OutputEncoding.EncodingName 日本語(シフト JIS)
エスケープ文字に ` 使ったり \ 使ったり、PowerShellって破綻してんじゃねーの
一連のレス読んでそう思うなら破たんしてるのはお前の脳だ
レスやら他のブログ見てても「発見」の多いこと多いこと
>>158 がSystem.Management.AutomationあたりとPowerShellの仕様の兼ね合いを理解出来るんなら、破綻してるのは俺の脳だけどな
新しく増えたcmdletもいちいち調べなきゃならんし
まー他の言語のクセからくる先入観みたいなのがあるとはまることは多いかもねぇ シェルの領域で使う分にはヘルプで十分事足りるよ
シェルスクリプトの代用はC#だけで十分事足りる それほどC#の統合環境下でのデバッグはやりやすいし、書きやすい。 シェルスクリプトとしても考えられるほぼすべてがそろってる。 処理速度もシェルスクリプトあたりと比較にならないほど速い。 PSにあるのは一行コマンドとしての存在価値だけだな。 .netの下でしか動かないし、どーしたもんかな?
PSが.netから解放されて、メンテとか、システム修復とかに使えて DOSコマンドを置き換えるものなら意味あるんだけどな
く、苦じぃーw #全角数字を半角に置換 function ZenNumToNarrow($text) { $MatchEvaluator = { param($m) $x =[Microsoft.VisualBasic.Strings]::StrConv($m.Value, $to_narrow); return $x; } $rx = new System.Text.RegularExpressions.Regex("[0-9]+"); return $rx.Replace($text, $MatchEvaluator) ; }
自分で書くならこうかなー $m = { [Microsoft.VisualBasic.Strings]::StrConv($args[0].Value, "Narrow") } [regex]::Replace("0123456789", "[0-9]+", $m)
置換の$MatchEvaluatorみたいなのはjavascript(?)だったら、関数内関数みたいなので簡単にできなかったかなぁ
PSを使ってドコモメールの送信しようとするとしてますが、成功された方いらっしゃいますか?
function global:Zen2HanForFile($source){ $diff = ([int[]]'!'.tochararray())[0] -([int[]]'!'.tochararray())[0] $tgtarray = [int[]]$source.ToCharArray(); $match = [regex] "[a-zA-Z0-9!@#$%^&()−_+=`{};,.]" for($i = 0; $i -lt $tgtarray.length; $i++){ $tmp = $match.Match($source, $i, 1); if($tmp.success ){ $tgtarray[$i] -= $diff; } } }
C#で書いてもあんま変わらん static readonly Regex MatchZen = new Regex(@"[a-zA-Z0-9!@#$%^&()−_+=`{};,.]"); const char DiffZen2Han = (char)('!'-'!'); public string Zen2Han(string source) { char[] tgtarray = source.ToCharArray(); for (int i = 0; i < tgtarray.Length; i++) { Match tmp = MatchZen.Match(source, i, 1); if (tmp.Success) { tgtarray[i] -= DiffZen2Han; } } }
scriptcs - Write C# scripts in your favorite text editor scriptcs.net/
.netの豊富なライブラリをコールするだけなんだからC#もPowerShellも変わらんよな C#のプログラムなんてほとんどライブラリコールで終わる
171 :
名無し~3.EXE :2013/12/30(月) 22:24:09.50 ID:a/2VaF2t
>>158 一連のレス読んだらどう見ても終わってるだろ
一ヶ月も前の話題を振り返す池沼
173 :
名無し~3.EXE :2013/12/31(火) 02:46:25.85 ID:3i7Jf7wN
>>172 必要があるから振り返したんだよ池沼
お前はなんも考えもなしで食いつく池沼
こんなのがいついてるから普及しないんだよ気づけ
174 :
名無し~3.EXE :2013/12/31(火) 02:46:58.18 ID:3i7Jf7wN
>>172 おいクズ
内容で否定してみろ
一連のレス読んだらどう見ても終わってるだろ
175 :
名無し~3.EXE :2013/12/31(火) 02:48:34.44 ID:3i7Jf7wN
>>172 振り返すも何も他の仲間いねえじゃねえかおら
上げてやって感謝しろよ池沼
話題もふれないクズのくせに
からんでくんなバカ
176 :
名無し~3.EXE :2013/12/31(火) 02:50:45.58 ID:3i7Jf7wN
>>172 こっちは喧嘩売りに来てるんだよバカタレが
相手みてレスしろ
迷惑だからお前
177 :
名無し~3.EXE :2013/12/31(火) 03:00:26.71 ID:3i7Jf7wN
一連のレス読んだらどう見ても終わってるわ バカが一人で自分はいいこと書いてるとでも思ってんだろ くっさくっさ
1レスで済むところを連投お疲れ様です
Register-EngineEventでPowerShell.Exitingをサブスクライブすれば
Windows 7だけど、OS起動時にGUIの代わりにPowerShellを立ち上げる方法はありますか?
「GUIの代わりに」の意味がよく分かりませんが。。。 普通にスタートアップに下記のようなショートカットを入れておけばいいのでは C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -command C:\hogehoge\init.ps1
unix で X いれてないときみたいにいきなりログインシェルが powershell になってるようなのを期待してるんじゃない?
184 :
名無し~3.EXE :2014/01/15(水) 12:52:10.88 ID:djBEmZFb
サーバーならGUIなしにできるがクライアントでは無理なのでは…
>>183 そうそうそんな感じ。
PowerShellからwin<enter>とするとGUIが立ち上がったりとか。
正攻法では無理じゃない?
>>184 の言うとおりサーバだと公式な手順で powershell で起動するように設定できるようだけど。
適当にぐぐると実行ファイル書き換えるバックドドアみたいなのばっかりでてくる。
powershellってドットネットで動くと思うけどGUIなしとかできるのか。
コンソール版も内包してるんでしょう。 cmd 上で powershell 起動すると自前のターミナルではなく cmd のを使ってるし。
SQLite3を入れてPowerShellのウィンドウ内で操作しているんですが、 日本語が文字化けしてしまうんです。 Linuxのほうのシェル(Bash)では文字化けしないのですが・・・
190 :
189 :2014/01/18(土) 19:53:34.05 ID:KleAGlFQ
>>189 とりあえず自己レスです。
PowerShell上で
>Get-Content -Encoding UTF8 ファイル名.txt
とすると文字化けせずに読み込んでくれることが分かりましたが、
sqlite3のプロンプト内ではどうやったらいいのかわかりません。
>sqlite3
sqlite>.open データベースファイル名.db
sqlite>.tables
Japanese words
sqlite>select * from 'Japanese words';
だとやはり日本語データが文字化けして表示されてしまいます。
powershellの問題ではなくsqlite3の問題なのかな。
powershell は UTF8 での出力を表示出来ないからじゃないかね。 sqlite のシェルは出力を UTF8 で出す作りになってるからどうにもならんような。 $OutputEncoding とか [Console]::OutputEncoding/InputEncoding、 $Host::CurrentCulture あたりを弄るとか chcp 65001 とか色々やってたら powershell 側でうまくいくかもしれんね。
[Console]::OutputEncoding=[Text.Encoding]::UTF8 にすればうまくいきそうな気もするが、 終わった後は [Console]::OutputEncoding=[Text.Encoding]::Default に戻さないといけないので注意。
PSConsoleHostReadLineがあればUTF-8のまともな入出力に対応できる そう思っていた時期が俺にもありました。 また挑戦してみようかなぁ・・・ いや今回の話には関係ないんだけど
究極的にはホストプログラム書いちゃうのがいいのかもしれん
>>192 うちはそれやってから utf8 なテキストファイルを type すると powershell 自体が死んだ
>>181 Set-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" Shell -Value powershell.exe
196 :
名無し~3.EXE :2014/01/27(月) 23:38:50.74 ID:WWOYfxWI
PS C:\> Get-ChildItem env:Path Name Value ---- ----- Path %SystemRoot%\system32\WindowsPowerShell\v1.0\;C:\Ruby200\bin;C:\Windows\system32;C:\W... ...じゃ分かんねーよ
echo $env.Path $env:Path.split(";")
そりゃー、Get-ChildItemは中身を見るために使うコマンドじゃないからな ls *.txt でテキストファイルの中身全表示されたら敵わんだろ Get-Content env:pathで同じ結果なら文句も出ようがね
スマソ 覚え始めたばっかだった。 しかし、ls *.txtでファイル名が途中で切れたら困るんじゃ とおもったらファイル名一覧の場合は折り返すんだね。謎 PS C:\xxx> ls ディレクトリ: C:\xxx Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014/01/28 5:44 0 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa PS C:\xxx> ls |grep aba -a--- 2014/01/28 5:44 0 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa だめだこりゃ
多分君は cygwin いれたほうが捗るとおもうよ。
|ftつけるだけのことができないやつが一番駄目だこりゃ
ls | ? name.indexOf("aba") -gt -1 ls | ? name -like "*aba*" ls | ? name -match "aba" grepってことは一番下あたりかなあ
203 :
名無し~3.EXE :2014/01/29(水) 12:48:16.99 ID:T1G+p7cc
@(a-z) -> @("a", "b", "c", .... "z") こんな感じの構文で一気に配列に落とし込めないのかな?
205 :
199 :2014/01/29(水) 23:54:47.74 ID:z7pC3zVp
これだと長いファイル名が切れなくなった。 PS> ls | % { echo $_.BaseName } | ? { $_ -match "aba" } abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
とりあえずマウス位置のウィンドウをキャプチャするのを作ってみたんですが 大きく表示している Chrome とか デスクトップ とかしか拾ってくれません。 なんか 矩形の2番目にくる Top がいつも0になるんでポインタや構造体サイズ当たりが間違ってるのかなと思うんですけど どこが間違っているんでしょうか。 32ビットウィンドウだけが見えると言うわけでもなさそうで。 $Win32APIs = Add-Type -Language CSharp -Namespace Win32APIs -Name Window -MemberDefinition @" public struct Rect{ public int left, top, right, bottom; } [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)] public static extern IntPtr WindowFromPoint(int x, int y); [ DllImport( "user32.dll" ) ] public static extern int GetWindowRect( IntPtr hwnd, out Rect lpRect ); "@ function GetWindowRectFromPoint ($Point) { $handle = [Win32APIs.Window]::WindowFromPoint([int]$Point.X, [int]$Point.Y) $rect = New-Object Win32APIs.Window+Rect $ret = [Win32APIs.Window]::GetWindowRect($handle, [ref]$rect) if ($ret) { return $rect } } $Point = [System.Windows.Forms.Cursor]::Position $Rect = GetWindowRectFromPoint($Point) $Bitmap = New-Object System.Drawing.Bitmap -ArgumentList $( $Rect.right - $Rect.left ), $( $Rect.bottom - $Rect.top ) $graphics = [Drawing.Graphics]::FromImage($bitmap) $graphics.CopyFromScreen( $Rect.left, $Rect.top, 0, 0, $bitmap.Size) [System.Windows.Forms.Clipboard]::SetDataObject($bitmap)
ぐぐってたら COM呼び出しするソフト見つけたけど過去ログではテンプレだったんだな。 ActiveXPosh ってやつ。 これを使わずに呼び出すには .net かコマンド実行しかないのか。 PowerShell - PowerShell ならバック グラウンド ジョブがあるのか。 Start-Job, Get-Job, Receive-Job
208 :
206 :2014/02/03(月) 08:53:22.96 ID:+cUyijOr
プログラム板にもpowershellスレあるから 人がいないんじゃなくて桃白白にからんでたお前が臭いだけ
>>206 あのさ、
そーゆーの無理してシェルスクリプトでつくるよりC#使えばいーんでねーの?
Windows自体の機能はC#で書くに限るように思うんだが。
コマンドレット化するとかならともかくベタに書くだけなら素直に VS で書いたほうが早いわな。
>>210-211 スクリプトでやりたいんですよ。
開発環境入れたくないんですだよ。
UWSC や AutoIt や AutoHotKey を使わずにやれるならやりたい。
この手のソフトは操縦系を簡単に組めるようになってるけど
一旦テンプレが出来れば .net でも簡単に出来るわけで。
出来なくても連携部分がどこまで連携できるかなとか。
本当は機能ごとに連携パターンをそれぞれ作る予定だったのに
まさか一つもできないなんて。
.net プログラミングが出来るなら System.Management.Automation を .net から呼び出すのがよさげだけど
System.Management.Automation を .net 以外から呼び出せないかなあとか。
ところで、C#のソース部分でいきなり using System; とかやるとエラーになるんですが
どうしたらいいんでしょう。
> 無効なトークン 'using' が クラス、構造体またはインターフェイスのメンバー宣言で使用されています。
>>38 のを試したらエラー出なかった。
構造体またはインターフェイスのメンバーだからダメなのか。
それで型が変なことになってたのか。
よく分からん。
ちゃんと Add-Type の説明よんだらいいよ。 -MemberDefinition はあくまでメンバの定義で外側を class なんちゃら {} でくくられてるって考えたらいい。 ネームスペース追加したいなら -UsingNamespace using からクラス名からなにから全部コード中に書きたいなら -TypeDefinition か無指定。 ほぼ C# のコードそのままになる。 Add-Type の注意は、例えクラス定義しても他の Add-Type の中からはそのままじゃ見えないって所。 一度アセンブリを書き出して -ReferenceAssemblies しないと using しても見つからない。 オンメモリで Add-Type をまたぐのは無理らしい。 ちなみに、-OutputType と -OutputAssembly を指定すれば実行ファイルも作れたりするぞ。
>>214 早速ありがとうございます。
そこらへんいろいろパターンがあったけど意味が分からず適当にやってました。
もうちょっと勉強します。
216 :
名無し~3.EXE :2014/02/08(土) 15:36:49.30 ID:qPrUVIRX
surface pro2(Windows8.1)のコマンドプロンプト(管理者で実行)で netshコマンドでIPアドレスを変更しようとしたところ、要素が見つかりませんと エラーが出たのですが、powershellにこのコマンド移行されたと考えたよろしいでしょうか? ネット検索していたらそのような事が書かれていたので・・・ ただnetshコマンドでIPアドレスを変更するバッチを作りたかったのですが、 同じようなことをpowershellでできればやりたいのですが、ご教授ください。
ご教授なんかいたしません
219 :
名無し~3.EXE :2014/02/11(火) 00:34:50.24 ID:6G4rTE/1
えtst
220 :
名無し~3.EXE :2014/02/11(火) 00:39:18.39 ID:CpUAARdy
てst
Linuxのシェルではsuやsudoというコマンドで一般ユーザから管理者になれるんですけど、 Powershellでも同様なことができるんでしょうか?
大雑把な聞き方で申し訳ないんだけど 環境変数にある「lib」ってPowershellで使ってるの? この変数って何の場所を示してるの?
VisualC++のライブラリパスじゃないか?
>>224 それだと実現したいことができませんでした。
Windowsにはsuやsudoに当たるコマンドプログラムはないんでしょうかね。
ところでPowerShellの起動時のウィンドウ枠の大きさは設定できません。
設定をずっと有効にするためには、Linuxみたいにどこかの設定ファイルを
書き換える必要があるのでしょうか。
>>225 ・外に窓を開いていいのなら
Start-Process "$psHome\powershell.exe" -ArgumentList "-noexit" -Verb Runas
・タイトルバーを右クリックしてプロパティ | レイアウト | ウィンドウのサイズ
ISEで日本語を含んだオブジェクトをテーブル表示したらずれるんだけど何か対処法ない? コンソール版だと問題ないんだけど #例 $hash = @{} $hash["long long ascii string"] = 123 $hash["テーブルで日本語を使うと"] = 123 $hash | ft -AutoSize
なんか文字幅無視した処理になってるみたいだね。 ConsoleHost はそこら辺考慮してくれるけど ISE Host はまる無視なのか
230 :
名無し~3.EXE :2014/02/28(金) 21:24:54.82 ID:BKmsPwhf
Win2008ServerのPowershell使ってます。 サーバにすでに適用済みのセキュリティパッチ一覧を取得する方法は ネットにもサンプルがたくさんあるのでわかります。 そでなく、サーバにダウンロードされ(パッチ自体はまだインストール していない)Windows Updateに表示されたセキュリティパッチの一覧 のみを、テキストファイルで出力したいニーズがあるのですが、 ご存知の方教えてください。ヒントになるサンプルがあるリンク先が あればご紹介ください。 よろしくお願いします
231 :
名無し~3.EXE :2014/02/28(金) 21:59:19.69 ID:VRggz1UA
何やりたいのか分からないが、Linuxのsudoに相当するのは、Windowsではrunas ただし、Linuxみたくセキュリティが理由で実行ユーザーを分けたいのなら、Windowsはロール単位で分けた方かいいと思う
powershellでwget的なこと(httpプロトコルを使用して、htmlファイルを取得したい)をしたくトライしてるのですが、管理者権限がなくps1ファイルが実行ポリシー上制限されていて悩んでます。権限がなくても上記要望を満たせる方法ってないんでしょうか。
233 :
名無し~3.EXE :2014/03/08(土) 21:57:58.55 ID:f+vb4h3U
ps1ファイルからの実行じゃなく、メモ帳で開いて ISEにコピペしてそのまま実行だと行けない?
Invoke-WebRequest url -Outfile ファイル名 (Invoke-WebRequestはiwrと略せる) $wc=New-Object Net.WebClient $wc.DownloadFile("url","ファイル名") ファイルを落とすのはこんな感じで でもSet-ExecutionPolicy RemoteSigned (管理者権限で) をしておかないと不便だと思う。
いっそのこと、wgetないしcurlを自分のディレクトリに入れてしまう。 実行が制限されていなければ、だが。
あー、もうやっぱり実行権限エラーで-ExecutionPolicyオプションやや$env:PSExecutionPolicyPreferenceの存在を示さないのは犯罪レベルだな・・・
powershellの日本語ヘルプって作られてるの? 4.0では無いようだけど、3.0でもないの?
Windows 7 にもともと入ってる 2.0 は日本語ヘルプ使えるね
4.0にアップデートしちゃうと、2.0にあるコマンドの日本語ヘルプも見れなくなっちゃうのか。
共存できないの?
わからん
PSスクリプトを複数の非ドメイン環境の端末に配布して実行させたいけど、 端末のexecution policyを変更しないとPowerShellスクリプトがそもそも実行できない。 こういう場所ってどうやって実行ポリシーを変更させるのが効率的ですかね?
>>243 ありがとうございます
参考にさせていただきます!
245 :
名無し~3.EXE :2014/03/13(木) 13:12:36.91 ID:vxojom+K
誰か教えてください []を含む複数のファイルが同一フォルダーにあってそのリストを得たり名前を変更する方法 例 test[01].txt, test[02].txt, test[03].txt, test[04].txt があり Get-ChildItem '.\test`[01].txt' と入力したのですが該当なしになってしまい Get-ChildItem '.\test`[01`].txt' はエラーとなってしまいました 正規表現のメタキャラである[を`でキャンセルしたつもりでしたがうまくいきません よろしくお願いします
>>245 '.\test``[01``].txt' でいけた。
エスケープ二段構えってことは2回パースされてるってことなんだろうな。
補完だと一回しかエスケープされないのな・・・
gci -LiteralPath "test`[01`].txt"
gci test`[*`].txt | % { ... } 的なことをやる場合、$_.name $_.fullname は [] をクォートする必要あり
249 :
名無し~3.EXE :2014/03/13(木) 14:20:00.30 ID:vxojom+K
>>246 ありがとうございました、が
Get-ChildItem '.\test``[01``].txt' はうまくいきましたが
Rename-Item '.\test``[01``].txt' -NewName 'test01.txt' では
Rename-Item : 指定されたパス C:\TMP\test``[01``].txt のオブジェクトは存在しません。
とエラーになってしまいました
もうちょっと助けてください
`でも``でもだめだねえ・・・ Get-ChildItem `.\test\\[01\\].txt' | Rename-Item -NewName 'test01.txt' でもだめだった。
251 :
名無し~3.EXE :2014/03/13(木) 14:52:35.05 ID:vxojom+K
自己解決しました Rename-Item -LiteralPath .\test[01].txt -NewName test01 で できました Thanks
252 :
名無し~3.EXE :2014/03/13(木) 14:54:42.46 ID:vxojom+K
251です ところで-LiteralPathの意味教えてください
大体こんな感じで処理してる function escapebrackets([string]$string) { return (([regex]"(?<!``)\]").Replace(([regex]"(?<!``)\[").Replace($string,"`["),"`]")) } gci | ? name -match "test`[(.*)`]\.txt" | % {rename-item -LiteralPath (escapebrackets $_.fullname) ("test{0}.txt" -f $matches.1)}
>>252 パス内のワイルドカード(* ? [])を展開しないという意味です
255 :
名無し~3.EXE :2014/03/17(月) 17:44:28.82 ID:8X4UzM90
245です 皆さんにいろいろ教えていただいたことを基にいろいろ試したのですがうまくできなかったので 教えてください やりたいこと フォルダー内に test[01].txt, test[02].txt, test[03].txt, test[04].txt があります これらのファイル名を test[91].txt, test[92].txt, test[93].txt, test[94].txt にリネームする パイプ処理を使って1行のコマンドで行う よろしくお願いします
256 :
名無し~3.EXE :2014/03/17(月) 21:52:29.03 ID:Kf3bF1Nc
Get-ChildItem -Filter "test[0*" -Recurse |Rename-Item -NewName{$_.name -replace "0","9"}
みなさんはパス打つとき(PowerShellに限らず、2chやTwitterなどでも)、 ○○バックスラッシュ○○ ○○\○ ○○/○○ どれ派? バックスラッシュを2chで打つと\になるのでカタカナです
/ が使えるようになってからは / 使う やっぱり¥は見にくい。 あと、¥使ってるとLinux使ったときにバックスラッシュに違和感持ってしまう。 そう言えばLinuxでも / じゃなかったっけ。
実現の可否が分からなかったので、質問をさせて下さい。 2.0を使用しています。使用経験は浅いです。 以下のようなコードを使用し、csvファイルをpowershellで比較して、行番号の表示付きで差分を出そうとしています。 ================ $content1 = Get-Content "〜.csv" $content2 = Get-Content "〜.csv" $comparedLines = Compare-Object $content1 $content2 | Group-Object { $_.InputObject.ReadCount } | Sort-Object Name ================ 上記でもうまくいくのですが、csvファイルのサイズが大きい場合は処理が重くなるため、Get-Contentに-readcount xxxを指定して処理を速くしたいと考えています。 ただ、-readcount xxxを指定した場合、Get-Contentの結果が配列になるようで、後続のCompare-Objectの処理が意図した動きにならず、正しい結果が得られなくなりました。 アイデアが浮かばないのですが、-readcount xxxを指定し、かつ行番号の表示を付けて差分を出すことは可能なのでしょうか。
>>259 よくわからんけど、これ参考になる?
$a=select-string ^ c:\a.csv | % { $_.Path=""; $_ }
$b=select-string ^ c:\b.csv | % { $_.Path=""; $_ }
diff $a $b
261 :
259 :2014/03/21(金) 22:55:24.54 ID:nolM2WlZ
>>260 レスありがとうございます。
明記していなかったのですが、今回は比較する際に同じ行番号の行だけで比較するだけでなく、違う行番号の行でも内容が一致していればOK、という処理もしたいと考えています。
記載いただいた方法だとdiff処理の前に番号を振っていることから、diffの際に「-syncwindow 0」にするのと同じことになり、同じ行番号の行だけで比較する場合にしか使えないと考えます。
>>259 -readcount付けなくてもGet-Contentは1行ごとの配列として読みだしてるよ
forなりdoなりでreadcountを指定して回せばいいんでね
そもそもcsvならimport-csvして主キーで検索して比較すりゃいいんでないの?
乙です 8.1以降なんですな update 1のあとに入れて見ようかな
なぜにフィリピン
XPが今日でご臨終だから、いよいよPowerShellがデフォで入ってるOSだけになったね。
XPはこれからだ
http://toro.2ch.net/test/read.cgi/win/1397118718/143-146 をPowerShellでやってみた
管理者でPowerShellを起動して実行、パスは自分の環境に合わせて修正要
# イメージファイルのマウント先
$mountpoint="F:\mount"
# イメージファイル
# $image="C:\ESD\Windows\sources\install.wim" # RTM ver.
$image="C:\ESD\Windows\sources\boot.wim" # download ver.
# Windows 8.1 Update 1(KB2919355) の保存先
# 32bit
http://www.microsoft.com/ja-jp/download/details.aspx?id=42327 から事前に保存しておく
# 64bit
http://www.microsoft.com/ja-jp/download/details.aspx?id=42335 から事前に保存しておく
#
http://www.microsoft.com/ja-jp/search/DownloadResults.aspx?q=KB2919442 も必要
$package="F:\Download\system\OS\Windows 8.1 Update 1\ja"
# cpuが32bitか64bitか
$cpu="x86"
# $cpu="x64"
if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $image -Index 1 -Path $mountpoint
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2919442-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2919355-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2932046-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2937592-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2938439-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2934018-$($cpu).msu"
"イメージファイルを更新してアンマウントします`n終了後WindowsSetupBox.exeを起動してISOを作成してください"
Dismount-WindowsImage -Path $mountpoint -Save
exit
せめて、 Add-WindowsPackage〜 ・・・ はリストにしようぜ。
リスト?
http://toro.2ch.net/test/read.cgi/win/1382263043/572-584 の内容で
>>268 を書き換え
# 回復イメージ保存先
$restore="F:\Restore"
# イメージファイルのマウント先
$mountpoint="F:\mount"
# Windows 8.1 Update 1(KB2919355) の保存先
# 32bit
http://www.microsoft.com/ja-jp/download/details.aspx?id=42327 から事前に保存しておく
# 64bit
http://www.microsoft.com/ja-jp/download/details.aspx?id=42335 から事前に保存しておく
#
http://www.microsoft.com/ja-jp/search/DownloadResults.aspx?q=KB2919442 も必要
$package="F:\Download\system\OS\Windows 8.1\update 1"
# cpuが32bitか64bitか
$cpu="x86"
# $cpu="x64"
$imgwin="C:\ESD\Windows\sources\install.wim"
$imgesd="C:\ESD\Windows\sources\install.esd"
if (!(test-path $imgwin)) {
if (test-path $restore) {Remove-Item $restore -recurse -force}
New-Item $restore -type directory
Expand-WindowsImage -ImagePath $imgesd -Index 1 -ApplyPath $restore
New-WindowsImage -ImagePath $imgwin -CapturePath $restore -CompressionType "maximum" -Name "install"
}
if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $imgwin -Index 1 -Path $mountpoint
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $mountpoint -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
Dismount-WindowsImage -Path $mountpoint -Save
"終了後、install.wimを削除あるいは移動してから`nWindowsSetupBox.exeを起動してISOを作成してください"
Export-WindowsImage -SourceImagePath $imgwin -SourceIndex 1 -DestinationImagePath $imgesd -CompressionType "recovery"
exit
なんかおかしな動作してるなと思って調べた結果ファイル名に[]を含んでる時だった で原因はこれ >about_wildcard > [ ] ある範囲の文字と [a-l]ook book、cook、look took > 一致する > [ ] 指定された文字と一致する [bc]ook book、cook hook ワイルドカードにファイル名として使用可能な文字が入ってる実装とか初めて見たわ スクリプトのTest-Path,Copy-Item,Move-Item,Remove-Itemあたりを-LiteralPath指定に直しておくことにしよう
>("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) この書き方スゲーけど、自分には.NET臭がいやーん。 "${package}\Windows8.1-KB${_}-${cpu}.msu" でいいよね、多分(´・ω・`)。 この例だと、${...}で括る必要すらないけど、付ける方がなにかと嵌りにくいので。
Export-WindowsImage の圧縮形式で recovery は含まれてないようです (KeyNotFoundException発生)
http://toro.2ch.net/test/read.cgi/win/1382263043/601 を取り入れて書き直し
# ユーザー設定
$restore="F:\Restore" # 回復イメージ保存先
$mountpoint="F:\mount" # イメージファイルのマウント先
$package="F:\Download\system\OS\Windows 8.1\update 1" # 適用する Update 1(KB2919355) のパス
$cpu="x86" # cpuが32bit(x86)か64bit(x64)か
$imgwin="C:\ESD\Windows\sources\install.wim"
$imgesd="C:\ESD\Windows\sources\install.esd"
if (test-path $imgwin) {
if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $imgwin -Index 1 -Path $mountpoint
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $mountpoint -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
Dismount-WindowsImage -Path $mountpoint -Save
dism /Export-Image /SourceImageFile:"$imgwin" /SourceIndex:1 /DestinationImageFile:"$imgesd" /Compress:recovery
} else {
if (test-path $restore) {Remove-Item $restore -recurse -force}
New-Item $restore -type directory
Expand-WindowsImage -ImagePath $imgesd -Index 1 -ApplyPath $restore
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $restore -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
New-WindowsImage -ImagePath $imgwin -CapturePath $restore -CompressionType "maximum" -Name "install"
dism /Export-Image /SourceImageFile:"$imgwin" /SourceIndex:1 /DestinationImageFile:"$imgesd" /Compress:recovery
Remove-Item $restore -recurse -force
}
exit
import-module "C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\x86\DISM"
$env:path ="C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\x86\DISM"
↑Windows7で最新ADK8.1update使用の人は、上記2行が必要かな?
ADKURL
ttp://www.microsoft.com/ja-jp/download/details.aspx?id=39982
スクリプトの中に適用する番号いちいち全部書くのはどうかな $hoge = @("2919442","2919355","2932046","2937592","2938439","2934018") $hoge|%{処理} でなきゃ Get-ChildItem -path $package -File|where name -match "$('Windows8.1-KB\d+-'+"$cpu"+'.msu')"|sort|%{処理} でいいんじゃないの
>>276 ふむ。
下の方がそのまま使い回せるから、いいね。
ただし、パッチ間に依存関係がなく適用順を考慮する必要がないこと。
であれば、
Get-ChildItem -path $package -File | %{処理}
として、$packageディレクトリに突っ込むだけ。
Update2 チンチン☆⌒ 凵\(\・∀・) マダァ?
awkみたいにテキストの前と後ろに一括で文字を加えたいのですが 似たような機能ないですか?
279 :
名無し~3.EXE :2014/04/29(火) 23:52:04.40 ID:9jKWpPGF
get-content test.txt | %{ "aaa" + $_ + "bbb" } > test_add.txt 簡単だけどこんなの?
おおおすごい!できました!ありがとうございました
select-stringっていつの間にかbomなしのutf8にも対応してたんだな 前はダメだったよな
BOMなしだとエンコーディングの指定が必要ってだけだったと思う
BOMってやっぱり「ボム」って読むの?
ボムなしはシューティングだと非常にまずい状況w
-enocoding defaultを指定するとbomありutf8とsjisがマッチして、未指定だとsjisがダメでbomなしutf8がマッチする
bomありutf8じゃなくて、UTF-16LE(≒Unicode?)では?
289 :
287 :2014/05/03(土) 22:20:10.83 ID:pGeOmB8J
パワーシェル芸人になりたいです サンプルが豊富なサイト知りませんか?
芸人じゃないです、芸人になりたいんです><
詳説正規表現とPowerShellクックブックだろ 本買え本
295 :
名無し~3.EXE :2014/05/05(月) 17:23:56.15 ID:LhojqoV4
クックブッククックブック青い鳥〜
>>263 http://tech.guitarrapc.com/entry/2014/04/09/065516 を見ながらインスコしてみました
OneGetのヘルプだけ更新できませんでした
https://github.com/OneGet/oneget/wiki/cmdlets を見たら何とかなるかな?
> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 0 9701 0
> get-command -Module oneget
CommandType Name Source
----------- ---- ------
Cmdlet Add-PackageSource oneget
Cmdlet Find-Package oneget
Cmdlet Get-Package oneget
Cmdlet Get-PackageSource oneget
Cmdlet Install-Package oneget
Cmdlet Remove-PackageSource oneget
Cmdlet Uninstall-Package oneget
> update-help -uiculture en-us
update-help : UI カルチャ {en-US} を使用してモジュール 'OneGet' のヘルプを更新できませんでした: セキュリティ上の理
由から、DTD はこの XML ドキュメントでは使用できません。DTD 処理を有効にするには、XmlReaderSettings の DtdProcessin
g プロパティを Parse に設定し、XmlReader.Create メソッドにその設定を渡してください。
発生場所 行:1 文字:1
+ update-help -uiculture en-us
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Update-Help]、Exception
+ FullyQualifiedErrorId : HelpInfoXmlValidationFailure,Microsoft.PowerShell.Commands.UpdateHelpCommand
whileとか使って1万行くらい回すと極端に遅くなるんだけどそんなもんですか? 他に方法ないでしょうか?
メモリが足らなくなっている、んじゃね? バッファを用意して少しずつ追い出しながらやる。 処理内容が全く分からんからあてずっぽうだけど。
>>297 インタープリターはそういうもんだね。
処理する対象(データやオブジェクトとか)をどうやっても持っているか
によって、対処できる場合もあるけど。
try{ gps hogehoge } catch [Microsoft.PowerShell.Commands.ProcessCommandException]{ echo "ぬるぽ" } プロセス hogehoge が存在しないときに捕まえたいのですが catchできません。 catch [System.SystemException]{ echo "ガッ" } これなら良いのですが、プロセスが見つからないときだけcatchするにはどうすればいいでしょう?
303 :
302 :2014/05/21(水) 20:51:30.82 ID:APJK/217
訂正 gps -ErrorAction Stop hogehoge
try {gps -name hoge -ea stop} catch [Microsoft.PowerShell.Commands.ProcessCommandException]{"ga"} で ga と表示されましたよ
>304 ありがとうございます。 うちの環境だと Get-Process : 名前 "hoge" のプロセスが見つかりません。プロセス名を確認し、コマンドレットを再度呼び出してください。 発生場所 行:1 文字:9 + try {gps <<<< -name hoge -ea stop} catch [Microsoft.PowerShell.Commands.ProcessCommandException]{"ga"} + CategoryInfo : ObjectNotFound: (hoge:String) [Get-Process]、ProcessCommandException + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand となってしまいます。 環境はWindows7 Professionalです。なにか追加でインストールなりロードなり必要でしたらご教授ください。
>306 なるほど。 大変助かりました。 ありがとうございました。
ユーザの名前を一覧で出力させるには?
(Get-WmiObject Win32_UserAccount).Name
#「Windows Font Cache Service」を無効にする(管理者) Set-Service "Windows Font Cache Service" -StartupType Disabled #「Windows Font Cache Service」を停止する(管理者) Stop-Service "Windows Font Cache Service" #フォントキャッシュを削除する(Windows 8.1)(管理者) Remove-Item $env:SystemRoot\System32\FNTCACHE.DAT
#レジストリのFontsキーのエントリで値に".otf","\"が含まれるものを表示する(管理者) $reg = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" $reg.Property | % { if (($reg.GetValue($_).ToString().Contains(".otf")) ` -or ($reg.GetValue($_).ToString().Contains(".OTF")) ` -or ($reg.GetValue($_).ToString().Contains("\"))) {"$($_): $($reg.GetValueKind($_)): $($reg.GetValue($_))"} }
312 :
名無し~3.EXE :2014/08/17(日) 18:11:24.36 ID:7VwdOWUQ
>>309 アクティブディレクトリの特定のOU内のグループに所属しているユーザーを出力したいのです
pythonの_ とかMatlabのansのように 最後に実行したコマンドの結果が自動で入る変数はありますか? あるいは同等の機能を何らかの手段で追加できますか?
316 :
名無し~3.EXE :2014/09/18(木) 14:31:45.32 ID:NuvG1PhL
Windows7proの3.0環境での質問です。 csvファイルを読み込んで別のcsvファイルとして出力したいのですが、以下の条件を満たす方法が見つからず悩んでいます。 1.foreachやselect-objectで指定した項目のみを出力 2.指定項目はテキストファイルから取得する 上記を満たす場合、ps1のソース内は取得項目名やその数を可変に対応できるようにしなくてはなりません。 foreachやselect-objectで項目を指定するところでループを挟むことはできないのでしょうか。 また、別の解決方法があればご教授願います。
317 :
名無し~3.EXE :2014/09/18(木) 16:35:50.16 ID:vdaRty5H
関数にすればいいんじゃないから 対象項目をstartで指定して 処理実態をprocessに記述 endで出力に とわければいいと思うよ。 関数自体の作り方は、簡易なので例を見ると わかると思いますよ
318 :
名無し~3.EXE :2014/09/18(木) 18:45:05.81 ID:NfblEp/b
316です
>>317 ありがとうございます。
軽く試してみましたが行けそうな感じです。
functionにするのは盲点でした。
助かりました。
>>316 行ごとに指定項目があるとすると、
&{ipcsv __csv__ | select $args[0]} $(gc __text__) | epcsv ...
でいいと思う
Linuxのシェルよりも難解
配下のディレクトリから任意の拡張子のファイルの総数を計算する Linuxのシェルの場合 find . -type f -print0 | xargs -0 ls -db | grep -E '\.(avi|wmv|mp4)$' | wc -l PowerShellの場合 (Get-ChildItem . -file | Where-Object Extension -match "^\.(avi|wmv|mp4)$").Length 個人的にはPowerShellのほうが分かりやすい
オブジェクトで扱える範囲ならラクだな。 外れると、無理やり.NET使うより、他の言語を使う方がいいかな。
はい。みます。
326 :
名無し~3.EXE :2014/10/06(月) 18:04:23.53 ID:Y3dCvQWf
powershellにLinuxで言うところのmultipath( -ll)コマンドに相当するコマンドはありますでしょうか?
328 :
名無し~3.EXE :2014/10/07(火) 09:33:20.20 ID:SijVM56j
329 :
名無し~3.EXE :2014/10/18(土) 13:58:56.69 ID:ziiiKepv
Outlookのフォルダ構成を出力するのってどんなコマンドレットですか?
330 :
名無し~3.EXE :2014/10/18(土) 18:49:53.81 ID:B1sMeRrX
ヘルプをエディタに登録して引きたいんだけど .chmとかで配付してるPSヘルプはないのかな?
334 :
333 :2014/10/31(金) 05:12:33.09 ID:sKOJyCiq
>>333-334 そういうの
日本語のないのかと探したら、windows\helpの中に入ってたのね
これで十分です、お騒がせしました
自身のdos窓のウインドウハンドルってどこで参照できる? タイトル変えて探せば特定はできそうだけど、どこかに変数で保持してないかな
>自身のdos窓 って、起動したcmd.exeの意味じゃなくて?
>>337 そうそれ
状況によって窓をアクティブにしたいんだけど、ハンドルがどこで参照できるのか分からない
339 :
名無し~3.EXE :2014/11/06(木) 22:34:15.17 ID:dpNVCTt/
>>338 いろいろ探して、こんな風だとできることが分かった
参考になるかな?
$t = '[DllImport("user32.dll")] public static extern bool SetForegroundWindow(int handle);'
add-type -name win -member $t -namespace native
$p=([diagnostics.process]::GetProcesses() | ?{ $_.ProcessName -eq "cmd" -and $_.MainWindowHandle -ne 0 }).MainWindowHandle
[native.win]::SetForegroundWindow($p)
340 :
339 :2014/11/06(木) 22:58:02.41 ID:dpNVCTt/
341 :
339 :2014/11/06(木) 23:00:47.28 ID:dpNVCTt/
ということで ハンドルの取得は (Get-Process -Name cmd).MainWindowHandle
>>339 ありがと
うーん、"user32.dll"の仕様はよく分からないけど、名前が"cmd"でハンドルの有るものを選んでるようだね
だから複数あったり直接powreshell.exeで起動したら見付からないし、自身のものである保証もない
てっきりget-hostから参照できるどっかにハンドルも格納されてると思ったんだけど、違うみたい
やっぱりウインドウタイトル変えてそれをget-processから見つける力業しかないのかな
343 :
名無し~3.EXE :2014/11/06(木) 23:58:50.60 ID:dpNVCTt/
タイトル帰るとか、何かの違いが用意されてないと、識別できないよね 起動順序とかでいいなら、スタート時間が取れるので それで識別することもできるけど。
せっかくなので力業のウィンドウアクティブ乗せとく user32だと失敗することがあるみたいなんでVBので $bu = $host.ui.RawUI.WindowTitle $ran = '{0}{1}' -f (get-random),(get-random) $host.ui.RawUI.WindowTitle = $ran $myID = Get-Process|?{$_.MainWindowTitle -eq $ran}|%{return $_.ID} $host.ui.RawUI.WindowTitle = $bu [void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic") [Microsoft.VisualBasic.Interaction]::AppActivate($myID)
識別名の記述が面倒いので、ログオン名とかをつかってADのグループにメンバーに追加する方法ありますでしょうか?
348 :
346 :2014/11/12(水) 04:03:25.82 ID:5rG2BVPO
>>347 それで良いよ!中々やるじゃね〜か!
正直、見直したZe!!
>>349 ダメっていうか、そうした方が見やすい、メンテしやすいってことじゃないの?
その上に単純なStringの羅列で動かすケースも書かれてるじゃん。
正直赤い文字しか見てなかったけど上のも1つ1つが区切られてるね
1つのStringではダメってのがわかってなくて詰まってたんだ
コマンドライン上では↓で動くけどスクリプトファイルでは動かなくて
& FastCopy.exe /cmd=update /bufsize=512 /utf8 Z:\test.txt /to=Z:\test\
sample.ps1が↓の内容だと動いた
$cmd = "FastCopy.exe"
$arguments = @("/cmd=update", "/bufsize=512", "/utf8", "Z:\test.txt", "/to=Z:\test\")
& $cmd $arguments
↓だと引数がうまくわたらなくて動かなかったけど、$argumentsが1つの引数として扱われちゃってたってことだよね
$cmd = "FastCopy.exe"
$arguments = "/cmd=update /bufsize=512 /utf8 Z:\test.txt /to=Z:\test\"
& $cmd $arguments
FastCopyはこれ
http://ipmsg.org/tools/fastcopy.html
コマンドを単純に文字列にしてから実行してるんじゃなく、オプションはアプリの引数に直接入れてるみたいだからな その方が便利だけど これだけでカレント上のファイル全部渡せるよ、文字数制限もない &$cmd (dir -name)
情報thx わかればすっきりするし使いやすい感じだね 試しに作ってるのはバックアップ用スクリプトだけど渡したいファイルとフォルダは一部だけなので そこらへんはFastcopy側の/includeオプションを使う予定 ファイルごとにプロセス起動より親フォルダを渡してファイル指定したほうが速いだろうし 何度か試行した後に増殖したFastCopyプロセスも直感的に Get-Process -name FastCopy | kill でkillできたしISEの補完も便利だしほんといい子ですわ もう少し慣れてきたら周りにも布教していきたいなあ
ファイルの選別こそPSの得意分野だから利用したいところだけどね コピーだとフォルダ構造の問題があるから難しいかな
Fastcopy系って昔のwindowsのファイルコピーが糞だったから使われてただけで今は必要ないだろ
fastcopyとかのフリーソフト入れて使うのは好みだと思うけど、robocopyの需要はあると思う robocopy的な高速コピーってpowershellでできないのかな
robocopyって別に速さは売りにしてないんじゃ…
ファイルコピー系のソフトウェア否定論者ってどこにでもわくんだな… それはまぁどうでもいいとして robocopyはオプション豊富だしコピーだけじゃなくて同期もできるし、PSとの相性はよさそうだ TechNetのギャラリーとか見るとけっこうあるね
http://blogs.msdn.com/b/b8_ja/archive/2011/08/26/10201016.aspx 大量コピーに対応したサード パーティのコピー管理ツールをお持ちの方も多いはずです。
遠隔測定データによれば、こういったアドオンのうち最も人気のあるもの
(TeraCopy、FastCopy、Copy Handler など) であっても、
使用されているのは全 Windows 7 PC の 0.45% 未満に過ぎません。
Windows 7 の顧客ベースの大きさを考えれば絶対数としてはかなりのものですが、
多くのユーザーが大量コピーを得意とするツールを持っていないことは確かです。
私たちは、先述したようなアドオンに並ぶほどの機能をエクスプローラーに盛り込むつもりはありません。
サード パーティによるアドオンの市場は、今後も活発に継続していくものと考えています。
私たちが目指すのは、現在大量コピーをエクスプローラーで行っているユーザーに対して、
より高い制御性やコピー進行中の詳しい情報、そしてよりクリーンで効率的なエクスペリエンスを提供することです。
ファイルシステム上のGet-ChildItemで取得した値のtoString()値は 指定引数によって.FullNameか.Nameか変わるのでしょうか? -Include指定時のtoString()値は.FullNameで、-Directory -Recurseのみだと.Nameになる -IncludeがあるとFullNameになるみたいだけどこれはそういう仕様と思えばいいの? GetType()はDirectoryInfoで同じに見えるけど何か別のオブジェクトが渡されてるのかな 名前だけ欲しい場合は.Nameで取ったほうが安定か フォルダ構成: C:\temp\test\; C:\temp\直下に複数のファイル カレント: C:\temp $testdir = Get-ChildItem -Directory echo $testdir -> フォルダ構成が出力される echo "$testdir" -> test と出力される $includedir = Get-ChildItem -Directory -Recurse -Include "test" echo $includedir -> フォルダ構成が出力される echo "$includedir" -> C:\temp\test と出力される
オブジェクトをtoString()するよりもプロパティを使った方がいいんじゃないかな あと戻り値はオブジェクトの配列かオブジェクトになるから Get-ChildItem -Directory | % {write $_.Name} Get-ChildItem -Directory -Recurse -Include "test" | % {write $_.Name} みたいにしてみては? write (Get-ChildItem -Directory).Name write (Get-ChildItem -Directory -Recurse -Include "test").Name と等価です #gciに-Directory ってスイッチあったのかあ #gci | ? {$_.PSIsContainer} みたいなスクリプトはいつか書き直そう
5.0からの機能だから正式にはまだ先になるけどGet-ItemPropertyValue便利だね レジストリ値の取得が楽になるだけじゃなくファイル操作でも便利そう
リンク先見たがだいぶ厳しいな・・・
MSVPの彼が、残り全部埋めればよい。
369 :
名無し~3.EXE :2014/12/07(日) 15:35:05.33 ID:mOOkbryn
パワーシェルの自動化の便利さをまだ体感できてない。
PowerShell以外の方法による自動化の便利さは体感したことあるん?
gci -r C:\hoge\ | select fullname, lastwritetime ↑のようなコマンド打つと、C:\hogeフォルダ内のファイルのフルパスと更新日時が表示されるけど 更新日時ではなく前回保存日時を出力するには何を指定すればよいのでしょうか?
勝手に更新日時が書き換えられちゃってるってことかな 前回保存日時なるものと更新日時の違いがシステム的にわからないと思うよ
他に表示できるのはcreationtimeかlastaccesstimeですね OSが持ってないものは無理かと
エスパーたちの集い
Powershell を使って windows のインデックスを使ったファイル検索は可能なんでしょうか? スタートメニューの「プログラムとファイルの検索」の部分です。
@C:\hogeの内容が以下の通りだったとします。 PS C:\hoge> gci Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2014/12/17 23:48 9230 AAA.txt -a--- 2014/12/17 23:48 9230 BBB.txt -a--- 2014/12/17 23:51 30030 CCC.xlsx -a--- 2014/12/17 23:50 50694 DDD.jpeg -a--- 2014/12/17 23:50 50694 EEE.jpeg -a--- 2014/12/17 23:50 50694 FFF.jpeg A拡張子ごとのファイル数を表示します。 PS C:\hoge> gci | group extension Count Name Group ----- ---- ----- 2 .txt {AAA.txt, BBB.txt} 1 .xlsx {CCC.xlsx} 3 .jpeg {DDD.jpeg, EEE.jpeg, FFF.jpeg}
379 :
378 :2014/12/18(木) 00:07:18.25 ID:wqr0s9SP
>>378 のAで拡張子ごとのファイル数だけでなく、以下のように拡張子ごとの合計サイズも出すには
どのようなコマンドを書けばよいのでしょうか?
Count Name Length
----- ---- -----
2 .txt 18460
1 .xls 30030
3 .jpeg 152028
380 :
378 :2014/12/18(木) 00:10:23.18 ID:wqr0s9SP
↑の「1 .xls」は「1 .xlsx」の誤りです。申し訳ありません。
>>378 gci -File|group extension|select count,name,@{L="Length";E={$_.group|measure -sum length|select -expand sum}}
382 :
378 :2014/12/18(木) 22:23:18.57 ID:wqr0s9SP
>>381 バッチリできました!どうもありがとうございます!
でも意味が全くわからないのでこれから勉強します…orz
手癖で cd ~/ と打ったら、ちゃんと $HOME に移動して なんか笑えた
>>383 こんなのはどうでしょうか
function prompt {
"`n{0:MM/dd(ddd)HH:mm} {1} {2}@{3} {4}`n`$ " -f (Get-Date),$pid,$env:USERNAME,$env:USERDOMAIN,$pwd.path.replace($env:HOME,"~").replace("\","/")
}
元に戻すときは
function prompt {
"PS $($executioncontext.sessionstate.path.currentlocation)$('>' * ($nestedpromptlevel + 1)) "
}
ようやくPowerShell インストールできた zshやawkとかUnixの知識はあるけど、 そんなやつに適したクイックスタートの情報ある?
それらの知識はなかったものとして習得するのが一番の近道 いやまじで。
了解 MSらしいな >それらの知識はなかったものとして習得するのが一番の近道 とりあえずお薦めのURL頼む 履歴参照やスクロール1つすらホームポジションで行えない
Unix のシェルに慣れ親しんでる人ほど 使ってるうちに微妙だけどクリティカルな違いにイラつきだして 最終的に強烈なアンチになるイメージ
最初、パイプにバイナリデータ流して嵌まった
395 :
名無し~3.EXE :2015/01/17(土) 10:24:52.59 ID:KYtNM984
IEを操作するシェルを書いているのですが、 ファイル保存ダイアログのOKボタンを押す方法が解らず 困っております。 どのように書けば良いのでしょうか? よろしくお願いします。
396 :
名無し~3.EXE :2015/01/17(土) 21:37:57.28 ID:KYtNM984
あと、IT系は、政府が優先的に派遣法改悪の最初の犠牲者にするから、 選ばない方が良い。
397 :
名無し~3.EXE :2015/01/18(日) 09:48:48.16 ID:4W85U26x
398 :
名無し~3.EXE :2015/01/18(日) 17:07:30.94 ID:i1TnYdID
>>394 あれ、おれがやったら、それほどの差はでない。
Millisecondsで
137
28
という値になったよ。
ようし、つぎはシェルスクリプトと比べてみよう
cygwin 相手に速度負けするから止めて
今回のWindows10previewのバージョン情報 OSのビルド番号とPowerShellのマイナー番号が同じになってるっぽい 細かい違いはわからん Name Value ---- ----- PSVersion 5.0.9926.2 WSManStackVersion 3.0 SerializationVersion 1.1.0.1 CLRVersion 4.0.30319.0 BuildVersion 10.0.9926.2 PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...} PSRemotingProtocolVersion 2.2
ノーマルのWindows8.1で PowershellでQoSの設定をしたけど 機能しないのですが、いい方法とか見落としていることとかありませんかね・・・? (8.1 Proだと動作するのを確認しました。ローカルグループポリシーとPowershellの両方で) New-netqospolicy -Name "Mail" -IPDstPort 465 -IPProtocol TCP -ThrottleRateActionBitsPerSecond 500KB
違うかもしれないけど、WoW64かな?
どちらも手動設定で64bit版だから、おそらく大丈夫なはず。 Proとノーマルだと使うレジストリが違うようで ノーマルだとどうやっても無理ですかね・・・
ノーマルだと初期状態ではQoSパケットスケジューラ入ってない、ってことはないかさすがに
>>406 さすがにそこは大丈夫です。
>>407 対象が鯖っぽいから
クライアントだと違うかな・・・?
所詮、家庭内LANなので・・・
コマンド自体は存在するの?
コマンド自体は成立していて、 設定もGet-NetQoSPolicyで見ると反映されています。 ただ、Proとは違う場所に設定を書き込んでいる模様・・・ "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\QoS" Proだとここに書き込まれるのですが、無印8.1だとここではないようです。
Powershellでサーバ構築とかできるもん? サイトあれば教えて
サーバー構築というのをどういう意味で言っているのかわからないしサーバーの種類もわからない ソフトのサイレントインストールとか設定ならものによってはある程度可能だけど 0からPowershellでサーバーを作るのは骨が折れると思う どういうサーバーをどうやって構築したいのかを決めてからググってみてください
構築というより設定です。 FTPサイトの追加とかDNSの設定とか
そのへんのキーワードにpowershellって追加して検索してみるといい 英語のほうが出てきやすいかもしれんが日本語でもたぶんあるよ
416 :
名無し~3.EXE :2015/02/23(月) 21:04:15.56 ID:Ok+2rOTR
try catch がクソすぎないか? Reason : ItemNotFoundException だというので catch [System.Management.Automation.ItemNotFoundException] と書いてみたがキャッチできない catch [System.Management.Automation.RuntimeException] ならキャッチできた。はぁ?なにこれ。
>>416 どーゆー場面での話?
うちの環境だと例えばGet-Itemが投げるItemNotFoundExceptionは
catch [System.Management.Automation.ItemNotFoundException] でキャッチできたけど
419 :
名無し~3.EXE :2015/02/25(水) 13:06:04.95 ID:izOR9dvm
>>418 マジか
例えばこんなコード。本当はItemNotFoundExceptionをキャッチしたい
$ErrorActionPreference = "Stop"
$targetfiles = @()
try {
foreach ($target in $Args) {
$targetfiles = $targetfiles + @(ls $target | ?{ $_.Name -cmatch ".*\.csv$" })
}
} catch [System.Management.Automation.RuntimeException] {
"引数に指定したファイルが存在しません`n$target"
exit 1
}
>>419 .csvが無い時にエラーにしてほしいの?
そのコードだと.csvファイルが無い時はエラーも何も起きない気がするんだけど
421 :
名無し~3.EXE :2015/02/25(水) 23:05:04.97 ID:izOR9dvm
>>420 引数にcsvファイル名を指定する前提だからその場合は ls $target の時点でエラーになるんだよ
$targetfilesが空かのチェックは後続コードでやってる
ていうかそういうことはいいんだよ。
>>419 を実行するとItemNotFoundExceptionではキャッチできないのが問題なんだよ。結局PSのバグなのか?
$ErrorはErrorRecordオブジェクトだったり面倒くさい実装しやがって
424 :
421 :2015/02/26(木) 17:51:58.02 ID:AgWRqx80
>>423 おお
わざわざ調べてくれてありがとう
まさにそれっぽいわ
PS C:\Windows\system32> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
バージョン上げてみる
425 :
名無し~3.EXE :2015/02/26(木) 21:05:12.07 ID:AgWRqx80
バージョン上げたらキャッチできた。
で、
>>423 の
https://twitter.com/mutaguchi/status/570572243035512833 も検証してみたがその通りだった。
try {
ls $Args[0]
} catch [System.Management.Automation.ItemNotFoundException] {
"ItemNotFoundException"
} catch [System.Management.Automation.ActionPreferenceStopException] {
"ActionPreferenceStopException"
}
結果:ActionPreferenceStopException
まあこれは百歩譲るとして
} catch [System.Management.Automation.ItemNotFoundException] {
"ItemNotFoundException"
} catch [System.Management.Automation.RuntimeException] {
"RuntimeException"
}
結果:RuntimeException
426 :
名無し~3.EXE :2015/02/26(木) 21:09:56.69 ID:AgWRqx80
} catch [System.Management.Automation.ItemNotFoundException] { "ItemNotFoundException" } catch [System.Exception] { "Exception" } 結果:Exception おいふざけんなコラ try { try { ls $Args[0] } catch [System.Management.Automation.ItemNotFoundException] { "ItemNotFoundException" } } catch [System.Exception] { "Exception" } これならItemNotFoundExceptionになる 👀
427 :
名無し~3.EXE :2015/02/26(木) 21:19:49.34 ID:AgWRqx80
結論 ver3.0以降ではthrowされた例外をまずActionPreferenceStopExceptionとして catchブロックをスキャンし、catchできるブロックがない場合に 本来の例外型でcatchブロックをスキャンしなおす そのためActionPreferenceStopExceptionのスーパークラスである RuntimeException、SystemException、Exceptionのcatchを RuntimeExceptionのサブクラスのcatchと並べて書いてはいけない。 マイクロソフトは死ね
&#128064; 👀
&#128064; こうか
431 :
名無し~3.EXE :2015/02/27(金) 18:29:37.90 ID:9x7T7vro
練習 &amp#128064;
432 :
名無し~3.EXE :2015/02/27(金) 18:33:06.04 ID:9x7T7vro
あれ? &$128064
433 :
名無し~3.EXE :2015/02/27(金) 18:35:40.04 ID:9x7T7vro
こうかな? 👀
434 :
名無し~3.EXE :2015/02/27(金) 18:37:45.80 ID:9x7T7vro
ぱちぱち ユニコードの指定か〜 👏
435 :
名無し~3.EXE :2015/02/27(金) 18:40:26.39 ID:8jWPI845
/*--------------*/ /*---main.asm---*/ /*--------------*/
俺も目玉練習&#128064;…じゃなくて質問があります ユーザーが入力した文字列をオプションとしてコマンドに渡したいのですが どのようにすればいいですか? $options = ReadHost > -i input.mp3 -ac 1 -ab 64k output.mp3 ffmpeg $options 例えば↑のようにすると$options文字列全体が単一のオプション として解釈されてしまうのですが、これを複数のオプションとして渡したいです。 ご存知の方、ご回答お願いします
$options = (Read-Host) -split " " ffmpeg @options
439 :
436 :2015/03/01(日) 00:30:09.87 ID:4pMWpHBt
>437-438 レスありがとうございます! なるほど、配列にすればいいんですね 目から鱗です 出先から携帯でレスしてるので帰ってから試してみます めちゃくちゃ助かりました
440 :
名無し~3.EXE :2015/03/01(日) 07:19:23.87 ID:OSMqI2rj
>>437 そっか -split というオプションあるのね。
.NETの機能そのまま使って
(Read-Host).Split(" ")
でもいいですね。
cmdletの中身自体がこれだろうな。
442 :
名無し~3.EXE :2015/03/01(日) 18:09:34.71 ID:/aHo9vmY
あ、ほんとだね。 ありがと
443 :
名無し~3.EXE :2015/03/05(木) 03:22:42.31 ID:pIr+FJWY
組織変更に伴い、ファイルサーバとADの置換を行いたいとおもいます。 NTFSのアクセス権をSIDで検索してSIDできれば権限を置換したいのですが可能でしょうか?置換する元データはExcelで旧SIDと新SIDと権限を用意して、上から検索してEOFまで実行していきたいです。
マルチってぜんぜん違う板なんだからいいと思うよ