我正在尝试使用以下脚本测试两台电脑是否连接
$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
}
}
}
当我尝试为其中一个执行接收作业时,我会得到"无法索引到空数组"。我做错了什么?
您需要将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]
}
您必须通过-ArgumentList通过启动作业Cmdlet传递$i(和任何其他变量),因为您的脚本块在完全不同的powershell主机中运行,并且无法访问启动作业的shell内部的任何内容。
即使您的脚本块存在于原始代码中,Powershell也不会扩展其中的任何变量,直到它在另一个主机中执行代码为止。您可以在脚本块的开头定义param(),以使用通过-ArgumentList 传递的变量