2

ログと処理のために、powershell コマンドのコマンドと出力を別のプロセスに転送する必要があるシナリオがあります。

このコンソールをできる限り powershell に近づけたいので、単に別のコンソール プログラムでホストすることは望ましくありません。

start-transcript もありますが、バッファリングされているようです。行ごとにコンソール出力を取得する必要があります。

System.Management.Automation.Internal.Host.InternalHostUserInterface 呼び出しの WriteLine 中に powershell ホストにデリゲートを設定する方法があれば、それも実行可能です。

これを行う最善の方法は何ですか?

更新 (2012 年 5 月 29 日): 私はこれを行うために不条理な長さを喜んで実行します:

FieldInfo internaluiref = host.GetType().GetField("internalUIRef", BindingFlags.NonPublic | BindingFlags.Instance);
object valuecontainer = internaluiref.GetValue(host);
FieldInfo objectrefvalue = valuecontainer.GetType().GetField("_oldValue", BindingFlags.NonPublic | BindingFlags.Instance);
PSHostUserInterface internalHostUserInterface = (PSHostUserInterface)objectrefvalue.GetValue(valuecontainer);
FieldInfo externalUI = internalHostUserInterface.GetType().GetField("externalUI", BindingFlags.NonPublic | BindingFlags.Instance);
PSHostUserInterface externalHostUserInterface = (PSHostUserInterface)externalUI.GetValue(internalHostUserInterface);
HostUserInterfaceProxy indirector = new HostUserInterfaceProxy(externalHostUserInterface);
externalUI.SetValue(internalHostUserInterface, indirector);

これにより、分類された出力ストリーム情報を取得できます。

入力を取得する方法はありますか?

4

1 に答える 1

2

フォーマットされた出力と生の出力を混同しないでください。ホストインターフェイスに到達するものはすべて、すでに文字列に変更されています。PowerShellスクリプトから実際のオブジェクトを返したい場合は、C#で実行されたスクリプトブロックからの出力をストリーミングする方法に関する他の回答をご覧ください。

プログラムで実行されたScriptBlockの出力をストリーミングするにはどうすればよいですか?

于 2012-05-24T18:49:57.120 に答える