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

时间:2017-03-28 17:33:23

标签: powershell cmdlet

以下函数用于在PowerShell中实现阻塞睡眠 执行Start-Sleep cmdlet时会出现以下错误:

  

“无法验证参数'Seconds'的参数。   参数为null,为空,或者参数集合的元素包含空值“

echo打印正确的参数值,但参数不会传递给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

}

1 个答案:

答案 0 :(得分:0)

作业在另一个无法访问脚本参数的线程中执行。您可以将变量作为参数包含在scriptblock中:

$job = Start-Job {param($secs) Start-Sleep -Seconds $secs } -ArgumentList $numSecs

或者您可以使用使用变量范围(PS 3.0 +):

$job = Start-Job {Start-Sleep -Seconds $using:numSecs }