当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell Sleep - 如何暂停脚本

作者:精品下载站 日期:2024-12-14 03:40:53 浏览:17 分类:玩电脑

PowerShell Sleep - 如何暂停脚本


有时您需要添加暂停或暂停 PowerShell 脚本几秒钟。例如,当您使用 do-while 循环来检查服务器是否重新联机时。为此,我们可以使用 PowerShell Start-Sleep cmdlet。使用此命令,我们可以让脚本休眠几秒钟。

在本文中,我将向您提供几个示例,说明如何使用 PowerShell Sleep cmd。

使用 PowerShell 启动睡眠 cmdlet

PowerShell 中的 start-sleep cmdlet 实际上使用起来非常简单。我们只需要定义要暂停脚本多长时间。我们可以以秒(默认)毫秒为单位定义睡眠时间。

要让 PowerShell 脚本暂停 2.5 秒,您可以执行以下操作:

# Suspend the script for 2.5 seconds
Start-Sleep -Seconds 2.5

参数 -Seconds 并不是真正需要的,默认情况下使用秒。所以你也可以只指定秒数Start-Sleep 5。但为了便于阅读,最好使用 -s-seconds 参数。

# Pause for 5 seconds per loop
Do {
    # Do stuff
    # Sleep 5 seconds
    Start-Sleep -s 5
}
while ($condition -eq $true)

除了秒之外唯一的其他参数是毫秒。这允许您让脚本只等待很短的时间。

# Pause for 0.1 second per loop
Do {
    # Do stuff
    # Sleep 100 Milliseconds
    Start-Sleep -Milliseconds 100
}
while ($condition -eq $true)

使用 start-sleep cmdlet 最常见的地方是在 PowerShell 循环中。但您可以在脚本中的任何位置使用 sleep cmdlet。唯一的问题是您可能正在猜测应该等待多长时间。

建议

您可以使用组合键 Ctrl + C 来中断睡眠。这将恢复您的 PowerShell 会话或脚本。

睡眠直到特定时间

长时间运行 PowerShell 脚本并不总是最佳选择,但如果您需要暂停 PowerShell 脚本直到特定时间,那么我们可以使用两个日期对象来计算休眠秒数。

Start-Sleep ((Get-Date "06:00pm") - (Get-Date)).TotalSeconds;

如果您使用此方法,那么在脚本中添加警告或消息可能是个好主意,这样您就知道它将休眠多长时间:

$sleepUntil = "06:00pm"
$secondsToSleep = ((Get-Date $sleepUntil) - (Get-Date)).TotalSeconds

Write-Host "Pause script for $secondsToSleep seconcds untill $sleepUntil"
Start-Sleep $secondsToSleep

带进度条的 PowerShell 睡眠

当您使用 start-sleep cmdlet 暂停 PowerShell 脚本时,您将不会在控制台中看到任何情况发生。为了给用户一些视觉反馈,您可以在睡眠命令中添加进度条。

[玩转系统] PowerShell Sleep - 如何暂停脚本

唯一的问题是您需要编写大量代码来创建进度条。

您可以做的是创建一个函数,它将暂停您的脚本所需的时间并显示进度条。为此,我们使用 Write-Progress cmdlet 并计算 do-while 循环中剩余的百分比和时间。

然后,您可以简单地调用函数 Sleep-Progress 来暂停脚本并显示进度条:

Function Sleep-Progress($seconds) {
    $s = 0;
    Do {
        $p = [math]::Round(100 - (($seconds - $s) / $seconds * 100));
        Write-Progress -Activity "Waiting..." -Status "$p% Complete:" -SecondsRemaining ($seconds - $s) -PercentComplete $p;
        [System.Threading.Thread]::Sleep(1000)
        $s++;
    }
    While($s -lt $seconds);
    
}

Sleep-Progress 7

总结

当您需要挂起或暂停 PowerShell 脚本时,可以使用 Start-Sleep。我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯