WMI 查询库 C#

WMI Query Library C#

我很难理解为什么没有一个 WMI 查询库 在这里或 google 指出。简单的接口来查询 WMI 的信息。我所能找到的只是整个网络上 "write a new query like this..." 风格的主题,这对我来说毫无意义,而我正在处理数百个查询。

所以,这是我目前正在努力构建的:

using System;
using System.Management;

namespace hardware
{
    public class Info
    {
        public static Tuple<string[], int, int> Query(string Select, string From, string Where = null, string Answer = null, string Root = "root\CIMV2")
        {
            int Count = 0;
            string[] Values = Select.Split(',');
            if (Where != null && Answer != null)
            {
                ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From + " WHERE " + Where + " = '" + Answer + "'");
                string[] res = new string[Values.Length];
                foreach (ManagementObject wQuery in s.Get())
                {
                    foreach (string value in Values)
                    {
                        res[Count] = Convert.ToString(wQuery[value]);
                        Count++;
                    }
                }
                var result = new Tuple<string[], int, int> (res, Values.Length, Count);
                return result;
            }
            else
            {
                ManagementObjectSearcher s = new ManagementObjectSearcher(Root, "SELECT " + Select + " FROM " + From);
                string[] res = new string[Values.Length];
                foreach (ManagementObject wQuery in s.Get())
                {
                    foreach (string value in Values)
                    {
                        res[Count] = Convert.ToString(wQuery[value]);
                        Count++;
                    }
                }
                var result = new Tuple<string[], int, int>(res, Values.Length, Count);
                return result;
            }
        }
    }
}

几周来我一直在努力超越工作状态。来自基本的字符串多维数组(return string[] or string[][])刚开始测试,如果returning元组(我几年前成功使用过)会更好.

所以,有人知道,是否已经编写了库? 如果没有,那么从参考 DLL 库执行上述查询的最佳方法?

我知道这个问题很老了。但是你可以使用 ORMi 库。我认为它正好适合您的需求。

例如:

1) 定义你的 class:

[WMIClass("Win32_Processor")]
public class Processor
{
    public string Name { get; set; }

    [WMIProperty("NumberOfCores")]
    public int Cores { get; set; }

    public string Description { get; set; }
}

2) 查询:

WMIHelper helper = new WMIHelper("root\CimV2");

List<Processor> processors = helper.Query<Processor>().ToList();

3) 或惰性编码选项:

var processors = helper.Query("SELECT * FROM Win32_Processor");

您可以在此处找到更多信息:

https://github.com/nicoriff/ORMi

https://medium.com/@luque.nicolas/compare-ormi-and-traditional-net-wmi-implementation-f00db26d10a3