我正在使用以下脚本尝试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
。