如何使用 C# 在 WMI 中读取 ManagementObject 集合
Posted
技术标签:
【中文标题】如何使用 C# 在 WMI 中读取 ManagementObject 集合【英文标题】:How to read ManagementObject Collection in WMI using C# 【发布时间】:2011-04-01 05:33:32 【问题描述】:我在网上找到了一个代码,并一直在尝试获取有关 mo[] 的更多信息。
我正在尝试获取 ManagementObjectCollection 中包含的所有信息。
由于 mo 中的参数正在寻找一个我不知道的字符串值,我如何在不知道其参数值的情况下获取所有值。或者,如果我想在 ManagementObjectCollection
中获取与 mo 相关的所有索引器值
ManagementObjectSearcher objOSDetails = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
ManagementObjectCollection osDetailsCollection = objOSDetails.Get();
foreach( ManagementObject mo in osDetailsCollection )
_osName = mo["name"].ToString();// what other fields are there other than name
_osVesion = mo["version"].ToString();
_loginName = mo["csname"].ToString();
【问题讨论】:
【参考方案1】:查看您的 WMI 查询:
SELECT * FROM Win32_OperatingSystem
它的意思是“获取Win32_OperatingSystem
类的所有实例并包含所有类属性”。这是一个线索,结果 ManagementObject
s 是 WMI Win32_OperatingSystem
类的包装器。请参阅class description 以了解它具有哪些属性、它们的含义并确定您实际需要在代码中使用哪些属性。
如果您需要遍历所有可用属性而不对其名称进行硬编码,请使用Properties
属性,如Giorgi suggested。这是一个例子:
foreach (ManagementObject mo in osDetailsCollection)
foreach (PropertyData prop in mo.Properties)
Console.WriteLine("0: 1", prop.Name, prop.Value);
【讨论】:
如果系统是运行64位操作系统的win 8或8.1怎么办?那要用什么类! @Raulp:相同的类。 WMI 类与位数无关。【参考方案2】:首先使用the documentation,这样您就知道该属性的含义。试用WMI Code Creator 工具。
【讨论】:
【参考方案3】:您可以使用Properties Property 遍历所有属性
【讨论】:
以上是关于如何使用 C# 在 WMI 中读取 ManagementObject 集合的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 C# WMI / WMI Code Creator 检测 RealSense 摄像头
如何在 C# .NET 中读取 HDD S.M.A.R.T 寄存器并获取该寄存器的所有相关值?