0

我想知道在使用这样的调用命令时我的 scipt 是否在所有远程主机上有效执行:

Invoke-Command -ComputerName "test1","test2" -ScriptBlock {$env:computername}

当它以交互方式运行时,我可以看到如下错误消息:

  • CategoryInfo : OpenError: (test1:String) [], PSRemotingTransportException
  • FullyQualifiedErrorId : NetworkPathNotFound,PSSessionStateBroken

但是在“批处理模式”下运行脚本时该怎么办?

我尝试了 try{} catch{} 语句,但它似乎不起作用,

然后我尝试在变量中处理结果,也没有工作:

PS>$result=Invoke-Command -ComputerName "test1","test2","rodc1" -ScriptBlock {$env:computername}

PS>$result
rodc1

我最终为每个主机使用 new-pssession 并像这样测试它

$computers=@("test1","test2","rodc1")
$computers|%{
    $s=new-PSSession -ComputerName $_
    if($s -eq $null){
        $errs +="$_ : cant connect to host `n<br/>"
    }
    else{
        $sess+=$s
    }
}

invoke-Command  -Session $sess -ScriptBlock {$env:computername} -asJob -jobName "test"

现在,我可以使用 $errs 来了解哪些计算机出现故障

有没有更好/更简单的方法来做到这一点?谢谢你

4

2 回答 2

0

一些错误仍然没有被捕捉到这里是要修改的部分:

$computers=@("test1","test2","rodc1")
$computers|%{
    try{
    $s=new-PSSession -ComputerName $_
    if($s -eq $null){
        $rapport+="$_ : cant connect to host`n<br/>"
    }
    else{
        $sess+=$s
    }
    }
    catch{
        $rapport+="$_ : cant connect to host`n<br/>"
    }
 }
于 2012-11-15T10:07:43.120 回答
0

您可以只比较输入列表和输出列表:

Compare-Object $computers $result

InputObject SideIndicator
----------- -------------
test1     <=
test2     <=

或直接

(Compare-Object $computers $result).InputObject
于 2017-03-17T16:15:07.953 回答