Powershell Retrieve-Job 提供"cannot index into null array error"



我正在尝试使用以下脚本测试两台电脑是否连接

$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 传递的变量

相关内容

  • 没有找到相关文章

最新更新