ログと処理のために、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);
これにより、分類された出力ストリーム情報を取得できます。
入力を取得する方法はありますか?