gpt4 book ai didi

c# - 从 C# 以编程方式调用 CmdLet 时如何捕获 Powershell CmdLet 的对象输出

转载 作者:行者123 更新时间:2023-11-30 12:46:39 25 4
gpt4 key购买 nike

背景

  • 带 SDK 的 PowerShell 3
  • 使用 Framework 4.5 的 C#

实现

我已经使用 PSHostUserInterface 实现了我自己的 PSHost 登录。在 PSHostUserInterface 中,我重写了所有 Write... 方法并将其收集到一个用于输出的变量。

问题

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

This is sample string output from the command

Here we have object from Cmdlet.WriteObject function

This is another string output from the command

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

This is sample string output from the command

This is another string output from the command

问题

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

非常感谢

最佳答案

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

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

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

关于c# - 从 C# 以编程方式调用 CmdLet 时如何捕获 Powershell CmdLet 的对象输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com