PowerShellを使用する際、スクリプトの実行を一時停止したい場面はよくあります。例えば、APIのレスポンスを待つ、次のコマンド実行の間隔を調整する、システムの負荷を軽減するために待機するなど、さまざまな用途があります。
そんなときに便利なのが Start-Sleep コマンドです。本記事では、PowerShellの Start-Sleep
コマンドの基本的な使い方から、実際のスクリプトでの活用方法、応用例まで詳しく解説します。
Start-Sleep
コマンドは、PowerShellでスクリプトの実行を一時停止するために使用されるコマンドです。指定した時間だけ処理を停止し、その後、次の処理に進むことができます。
Start-Sleep -Seconds <秒数>
または
Start-Sleep -Milliseconds <ミリ秒数>
例えば、以下のコマンドは5秒間スクリプトを停止させます。
Start-Sleep -Seconds 5
基本的な使い方として、スクリプトを一定時間停止する方法です。
Write-Host "処理開始"
Start-Sleep -Seconds 3
Write-Host "3秒後に表示"
このスクリプトを実行すると、「処理開始」 と表示された後、3秒待機してから 「3秒後に表示」 というメッセージが出力されます。
秒単位ではなく、より短い時間の待機が必要な場合は、-Milliseconds
パラメーターを使います。
Write-Host "100ミリ秒待機"
Start-Sleep -Milliseconds 100
Write-Host "待機完了"
これは100ミリ秒(0.1秒)だけ待機し、次の処理に移ります。
Start-Sleep
はループ内でも活用できます。例えば、一定時間ごとにメッセージを出力するスクリプトを作成できます。
for ($i = 1; $i -le 5; $i++) {
Write-Host "ループ $i 回目"
Start-Sleep -Seconds 2
}
このスクリプトは 2秒ごと に「ループ1回目」~「ループ5回目」を出力します。
サーバーやデータベースに対して、一定間隔で処理を実行したい場合に使えます。
while ($true) {
Write-Host "データ取得処理実行"
# ここにデータ取得処理を記述
Start-Sleep -Seconds 10 # 10秒ごとに実行
}
このスクリプトは 10秒ごと にデータ取得処理を実行するループになります。
Webスクレイピングなどで、短時間に大量のリクエストを送るとサーバーに負荷をかけてしまいます。適度な間隔を開けるために Start-Sleep
を使用します。
$urls = @("https://example.com/page1", "https://example.com/page2", "https://example.com/page3")
foreach ($url in $urls) {
Invoke-WebRequest -Uri $url -OutFile "$($url -replace '.*/','').html"
Write-Host "ダウンロード完了: $url"
Start-Sleep -Seconds 5 # 5秒間隔でリクエストを送る
}
このスクリプトは、5秒間隔で異なるWebページを取得します。
システムのバックアップ処理を一定間隔で実行するスクリプトにも活用できます。
powershellコピーする編集するwhile ($true) {
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
Copy-Item "C:\source\file.txt" -Destination "D:\backup\file_$timestamp.txt"
Write-Host "バックアップ完了: $timestamp"
Start-Sleep -Seconds 3600 # 1時間ごとにバックアップ
}
このスクリプトは、1時間ごとにバックアップを作成します。
PowerShellでは Start-Sleep
以外にも待機処理を実現する方法があります。
方法 | 説明 |
---|---|
Start-Sleep -Seconds x | 指定秒数待機(簡単) |
Timeout /T x | コマンドプロンプトで実行(PowerShell外) |
[System.Threading.Thread]::Sleep(x) | .NETクラスを利用した待機(ミリ秒単位可) |
Wait-Event | イベント待機(高度な処理向け) |
Start-Sleep
は シンプルで使いやすい ため、ほとんどの用途で問題なく利用できます。
Start-Sleep
コマンドは、PowerShellでスクリプトを一時停止させるための便利なコマンドです。基本的な使い方から、ループ処理での応用、Webスクレイピングやバックアップスクリプトでの活用例まで解説しました。
PowerShellスクリプトをより柔軟に制御するために、Start-Sleep
を適切に活用してみてください!