* 外部プログラムの起動 [#w3194ac3]
** 直接指定 [#s2039af5]
PS> notepad.exe test.txt
- メモ帳が開く。
- notepad.exeは環境変数PATHが通っている必要がある。
** Invoke-Exporession [#pd494539]
PS> $str = "Get-Process | select -First 1"
PS> Invoke-Expression $str
PS> $str = "notepad.exe test.txt"
PS> Invoke-Expression $str
- $strがパースされる。
- いわゆるevalに相当する。
** Invoke-Item [#meac79c1]
PS> Invoke-Item test.txt
- (拡張子.txtがメモ帳に関連付けられていれば)メモ帳が起動して、test.txtが開く。
** &演算子 [#v06e4486]
PS> $cmd = "notepad.exe"
PS> $arg1 = "test.txt"
PS> & $cmd $arg1
PS> $cmd = "ping.exe"
PS> $all_args = @("-n", "3", "www.yahoo.co.jp")
PS> & $cmd $all_args
PS> & "C:\Program files\mycommand.exe" "test 2016.txt"
- 先頭に&を付けて、後に続くコマンドを実行する。
- &を付けなくても、通常はコマンドが実行できるが、上の3つ目の例のようにコマンドがスペースを持つ場合、引数がスペースを持つ場合、面倒なクォートを考えずに、そのまま実行できず。
*** 参考 [#r64e0318]
http://ss64.com/ps/call.html
** cmd /c [#b6410756]
** 外部コマンドプロンプト呼び出し cmd /c [#b6410756]
PS> cmd /c "ping.exe -n 2 www.yahoo.co.jp"
123.1.2.123 からの応答: バイト数 =32 時間 =13ms TTL=57
123.1.2.123 からの応答: バイト数 =32 時間 =13ms TTL=57
- cmdに/cオプションをつけて、実行するコマンドを指定する。
- /cによってコマンドプロンプトを起動して指定されたコマンド実行後にPowerShellに戻る。もし/kオプションにすると、コマンドプロンプトが起動されたままでPowerShellに戻ってこない。
PS> $str = cmd /c dir *.txt
PS> $str
*** 外部コマンドプロンプト呼び出しの結果を変数に格納する [#a9117c3d]
PS> $result_text = cmd /c dir *.txt
PS> $result_text
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 4567-1234 です
C:\temp のディレクトリ
2018/08/16 17:32 3 1.txt
2018/08/16 17:32 3 2.txt
2018/08/16 17:32 3 3.txt
- CMD.exe上で、以下のプログラムを実行する。
- 上の場合、dirはPowerShellのGet-ChildItemではなく、CMD.exeのdirなので、結果の$strにはStringが格納される。
- 上の場合、dirはPowerShellのGet-ChildItemではなく、CMD.exeのdirなので、結果の$result_textにはStringが格納される。
*** CMDでプログラムを実行する場合の戻り値の判定 [#h77e25ba]
& cmd.exe /c 'ping.exe doesnotexist && exit 0 || exit 1'
Write-Host $? # => False
Write-Host $LASTEXITCODE # => 1
- CMDで指定するプログラムで適切なエラーコードを返すようにする。
- そのエラーコードは$?や$LASTEXITCODEで参照できる。
** Start-Process [#y33b4f24]
PS> $ps = Start-Process ping.exe -ArgumentList "-n 10 www.yahoo.co.jp" -PassThru
- -PassThruパラメータを付けると、$psにプロセスオブジェクトが格納され、$psを通して、外部プロセスの制御が可能になる。
** 参考 [#d1f0049c]
http://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx