PowerShell でスクリプトを書いていると、「処理を一時停止したい」「一定時間だけ待機したい」といった場面は頻繁にあります。
本記事では、PowerShell における代表的な待機・停止(Pause 相当)の方法を整理し、実務で迷わず使い分けられるように解説します。
目次
1. PowerShell の待機・停止方法は大きく4種類
PowerShell でよく使われる待機処理は、目的別に次の4つに分類できます。
- 時間で待機する(Sleep)
- Enter キー入力まで停止する(Pause 相当)
- 任意のキー入力を待つ
- 条件が満たされるまで待機する(ループ + Sleep)
以降、それぞれを順番に見ていきます。
2. 一定時間だけ待機したい:Start-Sleep
最も基本となる待機方法が Start-Sleep です。指定した時間だけ処理を停止できます。
秒で指定する
Start-Sleep -Seconds 5
5 秒間待機します。
ミリ秒で指定する
Start-Sleep -Milliseconds 500
0.5 秒(500 ミリ秒)待機します。
Start-Sleep は、バッチファイルの timeout コマンドに相当するものとして覚えておくと便利です。
3. Enter キーを押すまで停止したい:Read-Host(Pause 相当)
PowerShell には、バッチファイルの pause コマンドに直接対応する命令はありません。
その代わり、Read-Host を使うことで同等の動作を実現できます。
Read-Host "続行するには Enter キーを押してください"
ユーザーが Enter キーを押すまで、処理はそこで停止します。
よくある用途
- スクリプトの途中でユーザー確認を入れたい
- スクリプト終了後にウィンドウがすぐ閉じるのを防ぎたい
Read-Host "終了するには Enter を押してください"
4. 任意のキー入力を待ちたい:Console.ReadKey()
Enter キー以外も受け付けたい場合は、.NET の ReadKey() メソッドを使用します。
Write-Host "何かキーを押してください..."
[void][System.Console]::ReadKey($true)
特徴
- Enter を押さなくても 1 キー入力で処理を再開できる
- 押されたキーを取得することも可能
ゲーム風の処理や、ユーザー操作を細かく制御したい場合に向いています。
5. 条件が満たされるまで待機したい:while + Start-Sleep
実務の自動化スクリプトで特に重要なのが、「条件が整うまで待機する」パターンです。
例:サービスが停止するまで待機する
while ((Get-Service -Name Spooler).Status -ne "Stopped") {
Write-Host "停止を待っています..."
Start-Sleep -Seconds 1
}
Write-Host "停止しました"
ポイント
- サービスの状態を定期的にチェック
Start-Sleepを入れることで無限ループによる高負荷を防止- 状態監視・待機処理の基本パターン
6. 目的別:おすすめコマンド早見表
| やりたいこと | 使用するコマンド |
|---|---|
| 一定時間待機したい | Start-Sleep |
| Enter キーで停止したい | Read-Host |
| 任意のキー入力を待ちたい | Console.ReadKey() |
| 条件が満たされるまで待ちたい | while + Start-Sleep |
7. まとめ:PowerShell の待機処理は用途で使い分ける
PowerShell では、目的に応じて待機方法を正しく使い分けることが重要です。
- 時間で止めたい →
Start-Sleep - ユーザー操作を待ちたい →
Read-Host/ReadKey() - 条件が整うまで待ちたい →
while + Start-Sleep
特に自動化スクリプトでは「条件待ち」が頻出するため、この考え方を押さえておくと実務で大きく役立ちます。
コメント