使用 C# 中的 PowerShell 主机如何获取输出?

Using the PowerShell host from C# how can I get the output?

具有以下 NET 5 控制台应用程序:

static void Main(string[] args)
{
    using var ps = PowerShell.Create();
    // ps.AddCommand("Get-Service");
    ps.AddStatement().AddCommand("Get-Service");
    ps.Invoke();
}

调用似乎没有错误执行,但输出到哪里去了? 我已经尝试了 AddCommandAddStatement,并且还在调试器中检查了 ps 变量,没有输出迹象。我确实发现了 ps.Streams.Information,但它是空的。

PowerShell.Invoke 方法的文档中所述,它 returns 一个包含 PowerShell 操作产生的任何结果的集合。

因此,你可以这样写

static void Main(string[] args)
{
    using var ps = PowerShell.Create();
    ps.AddStatement().AddCommand("Get-Service");
    var results = ps.Invoke();

    foreach (var result in results)
    {
        Console.WriteLine(result);
    }
}