如何在 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();
我需要获取哪个网络接口连接到哪个网络。我发现可以在 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();