如何在 C# 中获取 PowerShell 的 Get-WmiObject 的输出

How to get output of PowerShell's Get-WmiObject in C#

我需要获取哪个网络接口连接到哪个网络。我发现可以在 MSFT_NetConnectionProfile 中访问此信息。不幸的是,我无法直接从 C# (I get ManagementException: Provider load failure on computer where it should run) 访问它,但是当我从 PowerShell 访问它时,它可以工作。然后我的想法是 运行 来自 C# 的 PowerShell 命令,但我无法得到结果。

using System.Management.Automation;

string command = "Get-WmiObject -Namespace root/StandardCimv2 -Class MSFT_NetConnectionProfile | Select-Object -Property InterfaceAlias, Name";

PowerShell psinstance = PowerShell.Create();
psinstance.Commands.AddScript(command);
var results = psinstance.Invoke();

foreach (var psObject in results)
{
    /* Get name and interfaceAlias */
}

代码运行没有错误,但结果为空。我什至尝试用相对和绝对文件路径添加 Out-File -FilePath <path-to-file> 但没有创建文件。我什至尝试过旧的 >> <path-to-file> 但没有运气。当我添加 Out-String 然后有一个结果,但它是空字符串。

当我直接在 PowerShell 中测试命令时,它起作用了。有没有办法在 C# 中获取它?

PS 命令必须以 builder-pattern 方式构造。 此外,在 PS Core 中,Get-WmiObject 已被 Get-CimInstance CmdLet 取代。

以下代码片段适用于我的环境:

var result = PowerShell.Create()
                       .AddCommand("Get-CimInstance")
                       .AddParameter("Namespace", "root/StandardCimv2")
                       .AddParameter("Class", "MSFT_NetConnectionProfile")
                       .Invoke();