Master Start-Sleep: 有效地暂停脚本

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循环中。 while循环是PowerShell中的一种结构,当其他事情发生时执行代码。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/