PowerShellを使ってスクリプトを自動化するとき、特定のプロセスの終了を待ってから次の処理に進めたい場面は少なくありません。そんなときに便利なのが、Wait-Process
コマンドです。Wait-Process
を使えば、指定したプロセスが終了するのを待ってから処理を続行できるため、スクリプトの安定性や正確性が向上します。本記事では、Wait-Process
の基本的な使い方から応用例、注意点まで、実践的にわかりやすく解説します。PowerShell初心者の方でも安心して読める内容になっていますので、ぜひ参考にしてください。
Wait-Process
は、PowerShellで特定のプロセスが終了するまで処理を一時停止するためのコマンドレットです。これにより、スクリプト内で他の処理が完了するのを待つことができます。
基本構文は以下の通りです。
Wait-Process -Name プロセス名
またはプロセスIDで指定することもできます。
Wait-Process -Id プロセスID
たとえば、notepad
というプロセスが終了するまで待ちたい場合、以下のように記述します。
Wait-Process -Name notepad
このコマンドを実行すると、notepad.exe
が終了するまでPowerShellは待機し、それが終わると次の処理へと進みます。
インストーラーなどの実行ファイルをPowerShellから起動し、それが終了するまで待機したい場合があります。
Start-Process -FilePath "setup.exe"
Wait-Process -Name "setup"
Write-Output "インストールが完了しました。"
このように書くことで、setup.exe
が終了するまで次の出力は実行されません。
プロセスIDを知っている場合は、より正確にターゲットを指定することができます。
$proc = Start-Process -FilePath "notepad.exe" -PassThru
Wait-Process -Id $proc.Id
Write-Output "メモ帳が終了しました。"
-PassThru
オプションを使うことで、Start-Process
で起動したプロセス情報を取得し、そのIDを使って待機処理ができます。
Wait-Process
自体にはタイムアウト機能がありません。しかし、Start-Sleep
やループ処理と組み合わせることで、指定時間まで待機し続けるという制御も可能です。
以下は簡単な例です:
$timeout = 30 # 秒
$elapsed = 0
while (Get-Process -Name "notepad" -ErrorAction SilentlyContinue) {
Start-Sleep -Seconds 1
$elapsed++
if ($elapsed -ge $timeout) {
Write-Output "タイムアウトしました。"
break
}
}
このようにすれば、30秒を超えてもnotepad
が終了しなければ処理を強制的に次へ進めることができます。
存在しないプロセス名やIDを指定すると、エラーになります。対策としては、-ErrorAction SilentlyContinue
やTry-Catch
で対処します。
try {
Wait-Process -Name "nonexistentprocess" -ErrorAction Stop
} catch {
Write-Output "指定されたプロセスは存在しません。"
}
同じプロセス名のアプリケーションが複数実行されている場合、すべてのインスタンスが終了するまで待機します。一部のインスタンスだけを対象にしたい場合は、プロセスIDで指定する方が確実です。
Wait-Process
は、複数のプロセス名またはIDを配列として渡すことで、すべてのプロセスが終了するのを待つことができます。
Wait-Process -Name "notepad", "calc"
Write-Output "すべてのプロセスが終了しました。"
この場合、notepad
とcalc
が両方終了してはじめて次の処理へ進みます。
スクリプトにWait-Process
を組み込むときは、以下の点に注意しましょう。
以下はその実装例です。
$proc = Start-Process "notepad.exe" -PassThru
Write-Output "メモ帳を起動しました。終了を待ちます..."
Wait-Process -Id $proc.Id
Write-Output "メモ帳が終了しました。次の処理を開始します。"
Wait-Process
コマンドは、PowerShellスクリプト内でプロセスの終了を待つための便利な機能です。正しく活用することで、スクリプトの動作が安定し、トラブルを未然に防ぐことができます。特に自動化処理やインストールスクリプトなどでは欠かせない存在です。
覚えておきたいポイントは以下の通りです:
PowerShellの自動化をもっと賢く、安定したものにするためにも、ぜひWait-Process
を積極的に活用してみてください。