Powershell Retrieve-Job给出"无法索引到空数组错误"

时间:2015-11-18 16:11:13

标签: windows powershell start-job

我正在尝试使用以下脚本测试两台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时,我得到"无法索引到空数组"。 我做错了什么?

2 个答案:

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