0

次のような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を使用して、どのコンピューターに障害が発生したかを知ることができます。

これを行うためのより良い/より簡単な方法はありますか?ありがとうございました

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 に答える