2017-05-03 16 views
0

System Center Orchestratorを使用してPowerShellスクリプトを実行しています。スクリプトを実行するコンポーネントは、Write-OutputWrite-Hostの結果をフェッチできますが、他のストリームは失われます。しかし、私は実際に他のストリーム、特に標準エラーストリームを利用したいと思います。PowerShellのスクリプト内のスクリプト全体の出力リダイレクトを設定しますか?

stderrstdoutのリダイレクトを設定する方法はありますか。

2>&1を実行する個々のコマンドでこれを行うことができますが、スクリプトにはかなりの数の行があるため、スクリプトのすべての行にこれを追加するのは面倒です。私はスクリプト内でスクリプトを実行することができましたが、それは他のいくつかの問題につながります。私の推測では、C#を使用してこれを設定することが可能でなければならないだろうが、私はその場合何を探すべきか分からない。

+1

'-redirectstandarderror'パラメータを指定して' start-process'コマンドレットを使用してスクリプトを 'powershell.exe'の別の呼び出しにラップすると、それらのストリームを取得できます。ラッパースクリプトは、すべてのストリームを解析する必要があります。私は、あなたがパワーシェルの中でパワーシェルを実行し、それが完了するのを待っている場合、どのような問題が発生するのだろうと思いますか? – Vesper

+0

Orchestrator内のPowerShellはネストのない頭痛で十分です(ネイティブアクティビティは32ビットしか実行されません)。ネストされたPowerShellを起動すると、スクリプトを実行するアクティビティは失敗しません。あなたがデフォルトでコンソール出力を得ないので、あなたのスクリプトに何が問題になったのか不思議に思うでしょう。一方、出力を得るインテグレーションパックはありますが、データバスに配置するアイテムに変数を直接マップする機能がありません。これはPowerShellの問題ではなく、PowerShellと実行を実行するコンポーネント間のやりとりです。 – Seth

答えて

0

パラメーターを使用してpowershell.exeからstart-processコマンドレット経由でスクリプトをラップすると、これらのストリームを取得できます。ラッパースクリプトは、すべてのストリームを解析する必要があります。

オーケストレーターによって設定されたいくつかのローカル変数について、入れ子になったPowershellプロセスを呼び出すことができない場合は、すべて$MaximumErrorCountまでのエラーを標準出力に記録する手段としてWrite-Output $errorを使用できます。正確にはエラーストリームではなく、開始点です。また、$ErrorActionPreferenceが「SilentlyContinue」に設定されている場合でも、この値は入力されます。

関連する問題