将变量传递给 powershell 函数中的 cmdlet



下面的函数旨在在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 }

相关内容

最新更新