2

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

4

2 回答 2

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]
}
于 2015-11-18T17:12:29.713 回答
0

您必须通过 Start-Job Cmdlet 通过 -ArgumentList 传递 $i (和任何其他变量),因为您的脚本块在完全不同的 powershell 主机中运行,并且无权访问启动作业的 shell 内的任何内容。

即使您的脚本块存在于原始代码中,Powershell 也不会扩展其中的任何变量,直到它在另一个主机中执行代码。您可以在脚本块的开头定义 param() 以使用您通过 -ArgumentList 传递的变量

于 2015-11-18T17:18:12.143 回答