PowerShellのWait-Processコマンドでプロセス終了をスマートに待機!使い方と実例を詳しく解説

PowerShellを使ってスクリプトを自動化するとき、特定のプロセスの終了を待ってから次の処理に進めたい場面は少なくありません。そんなときに便利なのが、Wait-Processコマンドです。Wait-Processを使えば、指定したプロセスが終了するのを待ってから処理を続行できるため、スクリプトの安定性や正確性が向上します。本記事では、Wait-Processの基本的な使い方から応用例、注意点まで、実践的にわかりやすく解説します。PowerShell初心者の方でも安心して読める内容になっていますので、ぜひ参考にしてください。


Wait-Processとは何か?

Wait-Processは、PowerShellで特定のプロセスが終了するまで処理を一時停止するためのコマンドレットです。これにより、スクリプト内で他の処理が完了するのを待つことができます。

基本構文は以下の通りです。

Wait-Process -Name プロセス名

またはプロセスIDで指定することもできます。

Wait-Process -Id プロセスID

たとえば、notepadというプロセスが終了するまで待ちたい場合、以下のように記述します。

Wait-Process -Name notepad

このコマンドを実行すると、notepad.exeが終了するまでPowerShellは待機し、それが終わると次の処理へと進みます。


よくある使用例

例1:インストーラーの終了を待つ

インストーラーなどの実行ファイルをPowerShellから起動し、それが終了するまで待機したい場合があります。

Start-Process -FilePath "setup.exe"
Wait-Process -Name "setup"
Write-Output "インストールが完了しました。"

このように書くことで、setup.exeが終了するまで次の出力は実行されません。

例2:特定のプロセスIDを指定して待機

プロセス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が終了しなければ処理を強制的に次へ進めることができます。


Wait-Processの注意点

1. 存在しないプロセスを指定するとエラーになる

存在しないプロセス名やIDを指定すると、エラーになります。対策としては、-ErrorAction SilentlyContinueTry-Catchで対処します。

try {
Wait-Process -Name "nonexistentprocess" -ErrorAction Stop
} catch {
Write-Output "指定されたプロセスは存在しません。"
}

2. 名前が重複するプロセスに注意

同じプロセス名のアプリケーションが複数実行されている場合、すべてのインスタンスが終了するまで待機します。一部のインスタンスだけを対象にしたい場合は、プロセスIDで指定する方が確実です。


複数プロセスを同時に待つには?

Wait-Processは、複数のプロセス名またはIDを配列として渡すことで、すべてのプロセスが終了するのを待つことができます。

Wait-Process -Name "notepad", "calc"
Write-Output "すべてのプロセスが終了しました。"

この場合、notepadcalcが両方終了してはじめて次の処理へ進みます。


スクリプトに組み込む際のポイント

スクリプトにWait-Processを組み込むときは、以下の点に注意しましょう。

  • 確実に終了を検知するにはIDでの指定が安全
  • 長時間の待機が予想される場合はタイムアウト処理も検討
  • ログ出力と組み合わせてユーザーに状況を知らせると親切

以下はその実装例です。

$proc = Start-Process "notepad.exe" -PassThru
Write-Output "メモ帳を起動しました。終了を待ちます..."

Wait-Process -Id $proc.Id

Write-Output "メモ帳が終了しました。次の処理を開始します。"

まとめ

Wait-Processコマンドは、PowerShellスクリプト内でプロセスの終了を待つための便利な機能です。正しく活用することで、スクリプトの動作が安定し、トラブルを未然に防ぐことができます。特に自動化処理やインストールスクリプトなどでは欠かせない存在です。

覚えておきたいポイントは以下の通りです:

  • プロセス名またはIDで待機可能
  • 同名プロセスが複数ある場合はIDで指定する
  • タイムアウト処理は自前で組み合わせる
  • エラー処理も忘れずに入れる

PowerShellの自動化をもっと賢く、安定したものにするためにも、ぜひWait-Processを積極的に活用してみてください。

タイトルとURLをコピーしました