PowerShellのWait関連コマンドは、スクリプトの実行中に特定の条件が満たされるまで待機させる際に役立ちます。
主に以下のような状況で使われます。
- プロセスが終了するまで待機する。
- イベントがトリガーされるまで待機する。
- ファイルが作成されるまで待機する。
基本的なコマンド例
Wait-Process
Wait-Processは、指定したプロセスが終了するまでスクリプトを一時停止させるコマンドです。
例
以下の例では、「notepad」プロセスが終了するまでスクリプトの実行を停止します。
Start-Process notepad
Wait-Process -Name "notepad"
Write-Host "Notepad has closed."
Wait-Processを使うことで、ユーザーがNotepadを閉じるまで次の処理を実行しないように待機できます。
Wait-Processの主なパラメータ
-Name
プロセス名で待機する-Id
プロセスIDで待機する-Timeout
指定した秒数で待機する(タイムアウト時間)
Wait-Process -Name "notepad" -Timeout 10
上記の例では、Notepadが終了するか、10秒が経過したら次に進みます。
Start-Sleep
Start-Sleepは、指定された時間(秒またはミリ秒)スクリプトの実行を一時停止します。
例
Write-Host "Sleeping for 5 seconds..."
Start-Sleep -Seconds 5
Write-Host "Awake now!"
-Milliseconds パラメータを使って、ミリ秒単位で待機することも可能です。
Start-Sleep -Milliseconds 500
Wait-Event
Wait-Eventは、イベントがトリガーされるまで待機するコマンドです。
PowerShellのイベント駆動型プログラミングで使用されます。
例
Register-EngineEvent -SourceIdentifier "PowerShell.Example" -Action {
Write-Host "Event received!"
}
Write-Host "Waiting for event..."
Wait-Event -SourceIdentifier "PowerShell.Example"
Write-Host "Event handling complete."
別のスクリプトやトリガーからNew-Eventコマンドでイベントが発生するまで、Wait-Eventはスクリプトを一時停止します。
Wait-Job
Wait-Jobは、バックグラウンドで実行中のジョブが完了するまでスクリプトを待機させるために使用されます。
例
$job = Start-Job -ScriptBlock {
Start-Sleep -Seconds 10
Write-Host "Job completed!"
}
Write-Host "Waiting for job to finish..."
Wait-Job -Job $job
Write-Host "Job finished."
バックグラウンドジョブが完了するまで待機し、完了後に次の処理に進みます。
実際のシナリオでの使用例
バッチプロセスの管理
バックグラウンドで実行されるバッチプロセスが完了するまで他の作業を開始したくない場合、Wait-ProcessやWait-Jobを使用して次のタスクを実行する前に確実にプロセスが完了するのを待つことができます。
$process = Start-Process -FilePath "C:\batch\script.bat" -PassThru
Wait-Process -Id $process.Id
Write-Host "Batch process completed."
イベント駆動の自動化
ユーザーの操作やシステムの状態に応じてスクリプトが実行される必要がある場合、Wait-Eventを使用して特定のイベントが発生するまで待機し、イベント発生時に処理を実行できます。
