主人 Start-Sleep:高效暫停腳本

PowerShell 的 Start-Sleep cmdlet 或 sleep 別名是一個簡單的 cmdlet,只有一個目的:暫停腳本。當在 PowerShell 控制台中執行時,由控制台執行的腳本或在 PowerShell ISE 中執行時,該 cmdlet 僅暫停 PowerShell 會話中的腳本或模塊,直到所需的時間(以秒或毫秒為單位)過去為止。

這個 cmdlet 很簡單,但可以應用在幾種不同的方式,讓我們腳本作者能夠創建出良好撰寫的腳本。

Start-Sleep 用法

使用 Start-Sleep cmdlet 非常容易,畢竟它只有兩個參數!假設我想暫停我的腳本,因為我在等待某個其他環境過程運行。該過程大約需要 10 秒,我需要確保在外部事件完成之前,我的腳本不會繼續運行。

要暫停腳本 10 秒,我只需使用 Start-Sleep -Second 10。如果我想更細緻,我也可以指定以毫秒為單位的時間,如 Start-Sleep -Milliseconds 10000

示例上下文

此 Start-Sleep cmdlet 最常見的用途之一是在 while 循環內部。PowerShell 中的 while 循環是一個構造,當其他事情發生時執行代碼whilewhile 循環的最佳用途之一是等待其他事情發生。與僅猜測一個過程需要多長時間並直接運行此 cmdlet 不同。

例如,也許您需要等待某個文件出現在文件夾中。也許該文件是由其他軟件放置在那裡的。一旦文件出現在文件夾中,您需要對其運行一些代碼。這個例子是使用while循環和Start-Sleep的優秀示例。

在下面的示例中,我的代碼正在等待C:\File.txt文件的出現。如果這是在腳本中,它會暫停腳本,直到發生此事件。從技術上講,我們不需要使用Start-Sleep來做到這一點,但如果不使用,這段代碼可能會影響您的計算機性能。它可以持續不斷地檢查此文件的速度取決於PowerShell!

我們不需要每0.0455毫秒檢查此文件。相反,我們應該減慢檢查速度,並且每五秒才執行一次測試。減慢while循環的速度是Start-Sleep命令的一個很好的用法。

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

有關使用此cmdlet並帶有漂亮進度條的示例,請查看這個

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