我有一个场景,我需要将powershell命令的命令和输出转发到另一个进程以进行记录和处理。
我希望这个控制台尽可能接近powershell,所以简单地将它托管在另一个控制台程序中是不可取的。
还有开始成绩单,但似乎是缓冲的。我需要逐行获取控制台输出。
如果我有办法在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);
这允许我获取分类的输出流信息。
我是如何获得输入的?
答案 0 :(得分:2)
不要将格式化输出与原始输出混淆。到达主机接口的任何东西都已经被包含在一个字符串中。如果你想从powershell脚本返回实际的对象,请看看我的另一个答案,关于如何从C#执行的脚本块中输出输出:
How to stream the output of a programmatically executed ScriptBlock?