2010年12月9日木曜日

◆プロセスの終了を待つ(Wait-Process,Start-Process)

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025

#メモ帳が終了するのを待つ
notepad | Out-Null
"メモ帳が終了しました"
Start-Process notepad -Wait -WindowStyle Maximized
"最大化で開いたメモ帳が終了しました"

#特定のメモ帳が終了するのを待つ
$memo = Start-Process notepad -PassThru
Wait-Process -Id ($memo.id)
"id=$($memo.id)のメモ帳が終了しました"

#全てのメモ帳が終了するのを待つ
notepad
notepad
Wait-Process
 -Name notepad | Out-Null
"全てのメモ帳が終了しました"

#メモ帳が終わるのを非同期に待つ
$obj = Start-Process notepad -PassThru
Register-ObjectEvent $obj -EventName Exited -SourceIdentifier memo -Action
{
 
Write-host "メモ帳の終了イベントが発生しました"
  Unregister-Event -SourceIdentifier memo
}
"スクリプトが終了しました"

notepad を Out-Nullにパイプしてあげるとその終了を待ってくれる。
notepad を開いた後になにか処理をしたい場合などはそれでは不都合なのでWait-Processコマンドレットでプロセスを特定して待つ。
Start-ProcessコマンドレットにもWaitスイッチがあるので、それで待っても良い。

すべてのnotepadが終了するのを待つにはnotepadという名前を指定して待てば良い。

非同期に終了を待つにはProcessのExitedイベントを拾えば良い。

0 件のコメント:

コメントを投稿