Odczytywanie informacji o zasobach komputera – WMI i C#

Intel processor on black motherboard

Odczytywanie informacji o zasobach komputera – WMI i C#

Zastanawialiście się kiedyś, jak dostać się do szczegółowych informacji na temat komputera przy użyciu .NET’a? Z powodzeniem do tego celu można użyć WMI (Windows Management Instrumentation). Czym konkretnie jest WMI? Jest to technologia stworzona przez firmę Microsoft i dostarczana jako integralna część systemu Windows. Możliwości WMI są naprawdę spore. Przy jego użyciu możemy między innymi odczytywać szczegółowe informacje na temat zasobów komputera oraz nimi zarządzać (usuwać, dodawać, konfigurować). Co ciekawe możliwe jest również zdalne wykonywanie zapytań do WMI, co czyni te narzędzie ciekawą opcją do administrowania stacjami roboczymi. Dostęp do WMI jest możliwy z naprawdę szerokiego przekroju narzędzi (PowerShell, VBScript, C# itd). Ja dzisiaj skupię się na jednej z funkcjonalności, którą ten mechanizm dostarcza – czyli możliwości odczytu szczegółowych informacji na temat komputera z systemem Windows.

Jak korzystać z WMI w C#?

Pierwszą rzeczą, którą należy zrobić to dodać referencję do przestrzeni nazw System.Management. Tylko co dalej? Trzeba przecież wiedzieć, jak korzystać z tego całego WMI. Oczywiście można zawsze skorzystać z dokumentacji. Jednak ilość przestrzeni nazw i klas może przyprawić o ból głowy. Jak zatem sobie poradzić? Z pomocą mogą przyjść narzędzia WMI Code Creator oraz WMIExplorer.

WMI Code Creator to prosta aplikacja umożliwiająca generowanie zapytań do WMI dla trzech języków programowania tj. Visual Basica .NET, VBScript i C#. Jest ona już dosyć leciwa – ale działa. Można nawet wykonywać testowe zapytania:

Jeżeli chodzi o WMIExplorer, to on kodu już dla nas nie wygeneruje – ale możemy przy jego pomocy dosyć sprawnie wyszukiwać interesujące nas atrybuty oraz tworzyć zapytania SQL do WMI. Oczywiście zarówno w przypadku tego jak i poprzedniego narzędzia możemy połączyć się do komputera lokalnego lub zdalnego:

Jak widać odpytywanie WMI o jakiekolwiek informacje przybiera postać zapytań SQL. W istocie po wykonaniu zapytania zwracana jest tabela o ilości wierszy X i ilości kolumn Y. Co za tym idzie z poziomu kodu pisanego w C# musimy przeszukać taką strukturę:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System.Management;

namespace WMITest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(GetCPUName());
        }

        public static string GetCPUName()
        {
            try
            {
                string system = null;
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor WHERE DeviceID='CPU0'"); //wykonanie zapytania o CPU0 w systemie
                foreach (ManagementObject queryObj in searcher.Get()) //przeszukanie wszystkich wierszy (gdyby zapytanie nie precyzowało, że chodzi nam o CPU0, to przecież procesorów w komuterze może być wiele)
                {
                    system = queryObj["Name"].ToString(); //wybieramy kolumnę z atrybutem Name, w tym przypadku co by się nie stało z ostatniego wiersza ;)
                }
                return system; //zwracamy informację jako string
            }
            catch (Exception)
            {
                return "Unknown error"; //jeżeli coś pójdzie nie tak...
            }
        }
    }
}

Efektem działania takiej funkcji będzie zwrócenie informacji o modelu zainstalowanego w komputerze procesora. Korzystam tutaj z gałęzi root\\CIMV2. Generalnie większość informacji dotyczących sprzętu znajdziemy w tym miejscu.

Tyle ode mnie. Zachęcam do pobawienia się tym narzędziem oraz samym WMI, bo czasami jest naprawdę przydatne.

Opublikuj komentarz


The reCAPTCHA verification period has expired. Please reload the page.