2016-06-30 8 views
1

私は、何百もの仮想サーバーにまたがるタスクを管理するスクリプトを用意しています。ジョブ内でInvoke-Commandを実行し、詳細をWebページに出力します。Invoke-Commandからのリダイレクトエラー

私の問題は、パイプされていない、Invoke-Commandコマンドスクリプトブロック内スローされたエラーです:

このコマンドが正常にパイプ文字列としてエラー(サーバーに接続することはできません)出力:

Invoke-Command [dead server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String 

このコマンドを完全にエラーを無視するようで、それがすべてでは表示されません。文字列として

Invoke-Command [live server] -ScriptBlock { Write-Error "Test" } *>&1 | Out-String 

このコマンドを正しくパイプエラーアウト:

Invoke-Command [live server] -ScriptBlock { Write-Error "Test" *>&1 | Out-String } 

第1の例と第3の例の両方を使用すると、すべてをパイプすることができますが、それほど簡単ではありません。私はおそらく、これを使って複雑なスクリプトを実行する必要があります。エラーが検出されるようにすべてのコマンドをリダイレクトすることを期待するのは無理です。

私はそれをすべてパイプするために何かを見つけることさえできません。

実際には機能しますが、スクリプトブロックを関数に変換する方法がないように思われるので、非常にラウンドアバウトのように見えるので、スクリプトブロックをPSSession内のジョブ内にあるInvoke-Commandの関数...

+0

ここの質問?そして、なぜあなたは何か意味のある結果をもたらすと期待していますか? –

+0

これは誤字です。問題は、Invoke-Commandまたはその内部から生成されたすべてのエラーを出力ストリームにパイプする方法です。特に私の場合は、Foreach-Objectへのパイプです。 –

+0

すべてのエラーを '$ Error'変数に戻すことができます... – iRon

答えて

1

GitHub PowerShell\Remotelyにいくつかのコードがあります。

コードはない:それは与え、ジョブに基づいて結果オブジェクトを構築そして $testjob = Invoke-Command -Session $sessions -ScriptBlock $test -AsJob -ArgumentList $ArgumentList | Wait-Job

  • :このようなジョブのジョブを待ち、などのコールを呼び出し、コマンドの最初の

    1. それぞれのストリーム(少なくともそれらのほとんど)。これは複雑なコードです。

    コードは、テスト目的のためにリファクタリングする必要があります。

    時間がある場合は、必要に応じてリファクタリングする必要があります。コードは、オブジェクトのプロパティとしてストリームを提供しますが、それらのオブジェクトを移動したい場所にパイプすることができます(各オブジェクトをチェックすることを忘れないでください)。

  • +0

    +1興味深い答えですが、これを正しく解釈している場合、結果を返す前にジョブがWait-Jobで終了するのを待ちます。私はそれを少し後に掘り下げて、それが実際にこれをするかどうか、あるいはそれを生み出すために調整する方法があるかどうかを見ます。 –

    関連する問題