我正在尝试使用以下脚本测试两台PC是否已连接
$array ='PC1','PC2'
for ($i=0; $i -lt $array.length; $i++) {
Start-Job –Name TestConnection$i –Scriptblock {
if(test-connection $array[$i] -count 1 -quiet){
write-host Success
}
else { write-host No connection
}
}
}
当我尝试为任何一个进行Receive-Job时,我得到"无法索引到空数组"。 我做错了什么?
答案 0 :(得分:3)
您需要传入PC名称作为参数,因为该数组在脚本块的上下文中不存在,如下所示:
$array ='PC1','PC2'
for ($i=0; $i -lt $array.Length; $i++) {
Start-Job –Name TestConnection –Scriptblock {
param($pcName)
if(Test-Connection $pcName -Count 1 -Quiet) {
Write-Host Success
} else {
Write-Host No connection
}
} -ArgumentList $array[$i]
}
答案 1 :(得分:0)
您必须通过-ArgumentList通过Start-Job Cmdlet传递$ i(和任何其他变量),因为您的脚本块在一个完全不同的PowerShell主机中运行,并且无法访问shell内的任何内容开始这项工作。
即使您的脚本块存在于原始代码中,Powershell也不会扩展其中的任何变量,直到它在其他主机中执行代码。您可以在脚本块的开头定义param()以使用通过-ArgumentList传递的变量