社内SEの徒然なる日記

powerShellから他の処理を実行して見た

powerShellから、他のプログラムを起動してみます。
できれば、powerShellで完結させたいんですけど、出来ないことも結構ありますからね。

■ 投捨て型

先頭に&(アンパサント)を付けてやります。
下記は、ttpmacro.exeをパラメータwork.ttlを渡して起動しています。


& "C:\Program Files (x86)\teraterm\ttpmacro.exe" "C:\work.ttl"


この方法の場合、単純に処理を実行するだけです。
powerShell側の処理は続行されます。


■ 終了まで待機する

後続の処理で、外部プログラムの実行結果を使用したい場合には、Start-Processコマンドレットを使用します。
-Waitパラメータを指定すると、処理終了まで待機します。
-ArgumentListでパラメータを指定することもできます。


Start-Process -FilePath "C:\Program Files (x86)\teraterm\ttpmacro.exe" -ArgumentList "C:\work.ttl" -Wait


やってることは同じで、ttpmacro.exeをパラメータwork.ttlを渡して起動しています。
-Waitパラメータによって、ttpmacro.exeが終了するまでpowerShellは待機します。

■ 待機中に別のことをしたい

「単純に待つのはいや。まってる間に別の処理をしたい」というなら-PassThruをパラメータを使用します。
-PassThruパラメータを設定すると、戻値を取得することが出来ます。
この戻値を使用して、Wait-Processコマンドレットで処理終了まで待機します。


Write-Output "teraTerm開始します" | out-file "C:\work.log" Default
$teraWait = Start-Process -FilePath "C:\Program Files (x86)\teraterm\ttpmacro.exe" -ArgumentList "C:\work.ttl" -PassThru
Write-Output "teraTerm実行中" | out-file "C:\work.log" Default -append
Wait-Process -Id ($teraWait.id)
Write-Output "teraTerm終了しました" | out-file "C:\work.log" Default -append


ttpmacro.exeの実行直後に「teraTerm実行中」とログに出力し、そのままteraTerm側の処理が終了するまで待機します。
処理が終了したら、「teraTerm終了しました」とログに出力しています。
スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する