【问题标题】:How to read ManagementObject Collection in WMI using C#如何使用 C# 在 WMI 中读取 ManagementObject 集合
【发布时间】: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();
}

【问题讨论】:

    标签: c# windows winapi wmi


    【解决方案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 遍历所有属性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 1970-01-01
        相关资源
        最近更新 更多