5

背景

  • 带有 SDK 的 PowerShell 3
  • 带有框架 4.5 的 C#

执行

我已经使用 PSHostUserInterface 实现了我自己的PSHost登录。在PSHostUserInterface 中,我覆盖了所有Write...方法并收集到一个为输出提供服务的变量。

问题

在我的应用程序中,我调用使用WriteObject作为其输出的 Cmdlet。在PSHostUserInterface.Write...方法中,除了这些WriteObject的输出之外,我得到了所有内容。例如,我在常规 PowerShell 中看到了这一点:

这是命令的示例字符串输出

这里我们有来自 Cmdlet.WriteObject 函数的对象

这是命令的另一个字符串输出

这是我在应用程序的自定义 PSHost 中得到的:

这是命令的示例字符串输出

这是命令的另一个字符串输出

问题

如何在 C# 中获取 Cmdlet 的所有输出?

非常感谢

4

1 回答 1

1

我认为理查德的评论很到位。如果您使用 调用 cmdlet Pipeline.Invoke(),则必须:

  • A) 使用这些对象再次调用 Pipeline.Invoke 并将它们通过管道传输到Out-Default
  • B)只需将命令附加Out-Default到原始管道。这将告诉 PowerShell 将输出发送到显示器(并使用默认格式)。

通常,当您将管道输出的结果对象存储在 PowerShell 变量$res = Get-Process中或在 C# 中作为 .NET 的输出时Invoke(),您正在处理实际的 .NET 对象。如果未捕获管道输出,则将这些对象格式化和呈现给主机是 PowerShell 将为您执行的另一个步骤。在这种情况下, PowerShell 有效地将 a 附加| Out-Default到管道中。

于 2013-10-12T18:57:55.663 回答