【发布时间】:2020-11-14 09:29:08
【问题描述】:
我正在尝试执行这个命令:
Get-WmiObject -Class Win32_Product -Filter "Vendor = 'Microsoft'"
在 Windows 上托管的 .NET Core 3.1 应用上
这是我的代码:
var param = new Dictionary<string, object>();
param.Add("Class", "Win32_Product");
param.Add("Filter", "Vendor = 'Microsoft'");
var result = await ScriptHelper.RunScript("Get-WmiObject", param);
public static async Task<string> RunScript(string scriptContents, Dictionary<string, object> scriptParameters)
{
using (PowerShell ps = PowerShell.Create())
{
ps.AddScript(scriptContents);
ps.AddParameters(scriptParameters);
var pipelineObjects = await ps.InvokeAsync().ConfigureAwait(false);
var sb = new StringBuilder();
foreach (var item in pipelineObjects)
{
sb.AppendLine(item.BaseObject.ToString());
}
return sb.ToString();
}
}
但由于某种原因,它返回一个空字符串而不是例如
IdentifyingNumber : ...
Name : ...
Vendor : Microsoft
Version : ...
Caption : ...
我正在使用
"Microsoft.PowerShell.SDK" 版本="7.0.3"
提前致谢
【问题讨论】:
-
您可能必须自己读取 item 的属性,而不是假设 PowerShell 会自动返回 Format-List 输出。
-
您还可以从 System.Management.Infrastructure(或 Microsoft.Management.Infrastructure 用于 CIM 接口而不是 WMI)获取 WMI 对象,而不是通过 PowerShell SDK。
-
@Rup 不幸的是
pipelineObjects为空(计数 = 0) -
某些注册表项仅存在或只能在注册表的 32 位或 64 位分支之一中访问。使用其他版本的 Powershell 尝试相同的代码。
-
我错了还是
Get-WMIObject在 PS v7 上根本不起作用?您是否尝试改用Get-CimInstance?
标签: c# powershell asp.net-core .net-core