超时并在启动作业时将变量传递给参数列表

时间:2015-06-02 13:20:33

标签: powershell start-job scriptblock

我正在使用以下脚本尝试ping一个存储在CSV中的计算机列表。期望的结果是我将能够验证超时条件。

$servers = ipcsv "\\testbox\c$\Tools\PAL Stuff\servers.csv"
$timeoutSeconds = 3
$code = {
  foreach($server in $servers) {
    $name = $server.name
    if($ping = Test-Connection -ComputerName $($args[0]) -BufferSize 16 -quiet -count 30) {
      write-host "This should be 30 pings."
    } else {
      write-host "This should display when the job times out"
    }
  }
} -ArgumentList $name
$j = Start-Job -ScriptBlock $code 
if (Wait-Job $j -Timeout $timeoutSeconds) { Receive-Job $j }
Remove-Job -force $j

此脚本会导致错误:

  

您必须在' - '运算符的右侧提供值表达式。“

如果我将参数列表移到此处:

$j = Start-Job -ScriptBlock $code -ScriptBlock $code

我收到错误

  

无法验证参数'ComputerName'的参数。参数为null或空。

我看过有关将变量传递给scriptblock的文章和问题,但它们是Invoke-Command而不是Start-Job,我还没有让它在翻译中发挥作用。我的印象是,如果它有效,我就不会看到我期望的输出,即Write-Host

0 个答案:

没有答案