Master Start-Sleep: スクリプトを効率的に一時停止

PowerShellのStart-Sleepコマンドレットまたはsleepエイリアスは、単一の目的を持つシンプルなコマンドレットです。スクリプトを一時停止させることです。PowerShellコンソールで実行される場合、コンソールまたはPowerShell ISEで実行されるスクリプトは、必要な時間(秒またはミリ秒)が経過するまで、単にスクリプトまたはモジュールを一時停止させます。

このコマンドレットはシンプルですが、いくつかの異なる方法で適用でき、スクリプタがよりわかりやすいスクリプトを作成できるようにします。

Start-Sleepの使用

Start-Sleepコマンドレットの使用は非常に簡単です。なぜなら、2つのパラメータしかないからです!たとえば、他の環境プロセスが実行されるのを待っているためにスクリプトを一時停止させたいとします。そのプロセスには約10秒かかり、外部イベントが完了する前にスクリプトが実行されないようにする必要があります。

スクリプトを10秒間一時停止させるには、Start-Sleep -Second 10を使用します。もっと詳しくやりたい場合は、ミリ秒単位で時間を指定することもできます。Start-Sleep -Milliseconds 10000.

例のコンテキスト

このStart-Sleepコマンドレットの最も一般的な使用法の1つは、whileループの内部です。whileループは、何か別のことが起こっている間にコードを実行するPowerShellの構造です。whileループの最良の使用法の1つは、何か他のことが起こるのを待つことです。単にプロセスがどれくらいかかるかを推測するのではなく、このコマンドレットを直接実行します。

たとえば、フォルダにファイルが表示されるのを待つ必要があるかもしれません。おそらくそのファイルは他のソフトウェアによってそこにドロップされます。ファイルがフォルダにあると、それに対していくつかのコードを実行する必要があります。この例は、whileループとStart-Sleepの優れた使用例です。

以下の例では、私のコードはC:\File.txtファイルが表示されるのを待っています。これがスクリプト内にあれば、このイベントが発生するまでスクリプトが一時停止します。技術的には、これを行うためにはStart-Sleepは必要ありませんが、使用しない場合、このコードはコンピュータを無効にする可能性があります。このファイルを継続的に確認する速度はPowerShellに依存します!

このファイルを毎回0.0455ミリ秒ごとに確認する必要はありません。その代わりに、そのチェックを遅らせ、テストを5秒ごとに実行する必要があります。Whileループを遅らせるのはStart-Sleepコマンドの優れた使用例です。

$filePath = 'C:\File.txt'
while (-not (Test-Path -Path $filePath)) {
    ## 特定の間隔を待つ
    Start-Sleep -Seconds 5
}

このコマンドレットを使用して進捗バーを表示する例については、これをチェックしてください

Source:
https://adamtheautomator.com/start-sleep/