简体   繁体   中英

WMI Query Library C#

I am having hard time understanding why there's not a single WMI query library in here or google pointed out. Simply interface to query WMI for information. All I can find is "write a new query like this..."-style of topics all over web which makes no sense to me while there's few hundred queries I am working with.

So, here's my current effort building one:

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;
            }
        }
    }
}

I've been trying to get above in working order now for a weeks. Coming from basic string multi-dimensional array (return string[,] or string[][]) just started testing, if returning tuple (which I used few years ago successfully) would be better choice.

So, anyone know, if there is library already written? if not, then best way to do above query from reference DLL library?

I know this question is old. But you can use ORMi library. I think it will just fit on your needs.

For example:

1) Define your 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) Query:

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

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

3) Or lazy coding option:

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

You can find more information in here:

https://github.com/nicoriff/ORMi

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM