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 回答