如何使用 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 类的所有实例并包含所有类属性”。这是一个线索,结果 ManagementObjects 是 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#中如何获取系统中所安装的所有软件信息

如何通过 C# WMI / WMI Code Creator 检测 RealSense 摄像头

如何在 C# .NET 中读取 HDD S.M.A.R.T 寄存器并获取该寄存器的所有相关值?

使用 WMI 拉回远程 netstat 数据

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

C# 中的 WMI 无效查询,但在 wbemtest 实用程序中有效