下面的函数旨在在PowerShell中实现阻塞睡眠它在执行 cmdlet 时收到以下错误Start-Sleep
:
"无法验证参数'秒'上的参数。 参数为空、为空,或者参数集合的元素包含空值">
回显打印正确的参数值,但参数不会传递给 cmdlet。我尝试了一个局部变量,结果相同。尝试将其转换为字符串或整数 - 无济于事。如果数字是硬编码的,它的唯一工作方式
function BlockedSleep($numSecs)
{
echo "Sleeping $($numSecs) seconds"
$job = Start-Job {Start-Sleep -s $numSecs }
Wait-Job $job >$null #this supresses job output to console
Receive-Job $job
}
作业在另一个无权访问脚本参数的线程中执行。您可以将变量作为参数包含在脚本块中:
$job = Start-Job {param($secs) Start-Sleep -Seconds $secs } -ArgumentList $numSecs
或者您可以使用使用变量范围 (PS 3.0 +(:
$job = Start-Job {Start-Sleep -Seconds $using:numSecs }