我正在尝试知道在使用这样的invoke-command时我的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来了解哪些计算机失败
有更好/更简单的方法吗? 谢谢
答案 0 :(得分: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/>"
}
}
答案 1 :(得分:0)
您只需比较输入列表和输出列表:
Compare-Object $computers $result
InputObject SideIndicator
----------- -------------
test1 <=
test2 <=
或直接
(Compare-Object $computers $result).InputObject