Windows - Windows Management Instrumentation menedzselés profiknak

WMI 7. rész

A Windows Management Instrumentation (WMI) szolgáltatás objektumainak kezelésére a Windows tartalmaz egy segédprogramot. Használata azonban nem egyszerű, igényli a WMI magas szintű ismeretét. Ez ne riasszon el senkit a kipróbálásától. Cikkünkben bemutatjuk használatának alapjait: megnézzük, hogy lehet a lekérdezéseket megvalósítani, a különböző névterekbe bejelentkezni, osztályokat és azok példányait kilistázni, akár az egész öröklődési folyamaton keresztül. Továbbá leírjuk egy alapszintű osztály készítésének lépéseit és a metódusok végrehajtásának módját.
Csatlakozás a WMI szolgáltatáshoz
Az eszköz neve: WBEMTEST.EXE és a %systemroot%\system32\wbem könyvtárban található. Elindítása utáni következő lépés a WMI-hoz való csatlakozás. Ehhez kattintsunk a "Csatlakozás" ("Connect") gombra. A WMI elérésének javasolt módja az aktuális felhasználó adataival való bejelentkezés. Ezt szkriptekben a "impersonationLevel=impersonate" beállítással értük el. A "Megszemélyesítési szint" ("Impersonation level") beállításcsoportban aktivizáljuk a "Megszemélyesítés" ("Impersonate") rádiógombot (alapértelmezés) és akkor felhasználói nevet és jelszót sem kell megadnunk. Immár természetesnek mondható, hogy a legtöbb rendszerinformáció eléréséhez rendszergazdai jogosultságok szükségesek. Még egy figyelmet érdemlő beállítás szerepel az ablak "Kiszolgáló \ névtér" ("Server \ Namespace") mezőjében. Itt adhatjuk meg a névtér nevét, amelyikbe be akarunk jelentkezni. Az alapértelmezett érték a "root\default", ami az esetek többségében a "root\cimv2" névteret jelenti. A mező kitöltése nem kötelező, később bármikor átjelentkezhetünk másikba. A bejelentkezéshez kattintsunk a "Bejelentkezés" ("Login") gombra. Ekkor válik aktívvá a főablak összes vezérlője.
A névtér osztályainak felsorolása
Kattintsunk az "Osztályok számlálása" ("Enum Classes") gombra. Ha a névtér összes osztályának felsorolását választjuk kattintsunk az "OK" gombra. Az eredmények kétféleképpen jeleníthetők meg. A szuperosztályból közvetlenül származtatott gyermekosztályok listájához a "Csak közvetlen" ("Immediate only") a teljes öröklődési struktúra megjelenítéséhez pedig a "Rekurzív" ("Recursive") rádiógombot kattintsuk be. Ha csak egy osztályra - legyen az szuperosztály vagy gyermekosztály - vagyunk kíváncsiak írjuk be a nevét (pl.:" __SystemClass") és kattintsunk az "OK" gombra.
Egy osztály példányainak felsorolása
Az előző módszerhez hasonlóan kell eljárnunk, csak most a "Példányok számlálása" ("Enum Instances") gombot használjuk. Itt már nem tehetjük meg, hogy a szuperosztály mezőt üresen hagyjuk és megjelenítünk minden hatókörbe eső objektumot. Be kell írnunk a lekérdezendő szuperosztály (vagy gyermekosztály) nevet (pl.: "__Win32Provider"). Eredményül ismét egy listát kapunk.
WQL lekérdezések készítése
Lehetőség van közvetlenül a WMI Query Language nyelv segítségével a WMI lekérdezésére. Cikksorozatunkban ezt szkripteken keresztül már többször megtettük. Most kattintsunk a "Lekérdezés" ("Query") gombra. A megjelenő ablakba írjuk be a lekérdezést (pl.: "Select * from Win32_Processor"), majd kattintsunk az "Alkalmazás" ("Apply") gombra. A lekérdezés eredményeként láthatóvá válnak az adott osztály példányai (jelen esetben a rendszer által felismert processzorok azonosítója (DeviceID)). Ha duplán kattintunk a példányon, akkor annak tulajdonságai a hozzá tartozó értékekkel is megjelennek.
Megjegyzés:
A lekérdezések nem működnek minden esetben a "root\default" névtér beállítással. Ez esetben jelentkezzünk be a "root\cimv2" névtérbe.

Osztályok példányainak kilistázása
Kattintsunk a "Példány megnyitása" ("Open Instance") gombra. Írjuk be a nevét (pl.: Win32_NetworkAdapter). A következő ablakban megjelennek a kért osztály tulajdonságai, metódusai és minősítőik. Ugyanígy megjeleníthetjük az öröklődési sor nála eggyel magasabban lévő osztályát a "Szuperosztály" ("Superclass") gombbal. Apró trükk, hogy az így kapott ablak egy új ablak, csak ugyanúgy néz ki, mint az alatta levő és elfedi azt, de bármikor válthatunk köztük. Ha ismét rákattintunk a "Szuperosztály" ("Superclass") gombra egy további ablakban léphetünk egy szinttel feljebb, egészen addig, amíg el nem érjük a fa csúcsát, az öröklődési szint gyökérosztályát. A "Származtatott" ("Derived") gombbal azt tudjuk meg, hogy az adott osztálynak milyen gyermekosztályai léteznek. Térjünk vissza a "Win32_NetworkAdapter"-hez és kattintsunk a "Példányok" ("Instances") gombra. Végrehajtódik egy lekérdezés és megkapjuk az osztály példányait. Ezek már tényleges adatok. A példányok egyedi azonosítójuk (DeviceID) szerint vannak listázva. Kattintsunk duplán valamelyiken és a tulajdonságok között keressük meg a "Description" sort. Itt látjuk, hogy tulajdonképpen melyik eszközről is van szó (pl.: "WAN miniport (PPTP)" vagy "Realtek RTL8139(A) PCI Fast Ethernet adapter" - a gép konfigurációjától függően).
Új osztályok készítése
Kattintsunk az "Osztály létrehozása" ("Create Class") gombra. Adjuk meg a szuperosztály nevét - amelyik az öröklődési sorban eggyel az új osztály felett fog állni. Ha nem adjuk meg, akkor egy gyökér osztályt hozunk létre. Az alapszintű létrehozáshoz elegendő csak az osztály nevét megadni. Ezt a "__CLASS" tulajdonság szerkesztésével tehetjük meg. Kattintsunk rá kétszer és a "Tulajdonságszerkesztő" ("Property Editor") ablak "Érték" ("Value") mezőjébe írjuk be a nevet. Ezt követően kattintsunk a "Tulajdonság mentése" ("Save Property") az előző ablakban pedig az "Objektum mentése" ("Save Object") gombra. Ez utóbbi lépést ne felejtsük el, mert minden további figyelmeztetés nélkül elvész az új osztályon végzett minden munkánk!
Osztályok törlése
Nagyon egyszerű dolgunk van egy osztály törlésénél: Kattintsunk az "Osztály törlése" ("Delete Class") gombra és adjuk meg a törlendő osztály nevét.
Metódusok végrehajtása
Kattintsunk a "Metódus végrehajtása" ("Execute Method") gombra. Adjuk meg annak az osztálynak a nevét, amelyiknek valamelyik metódusát végre akarjuk hajtani (pl.: "Win32_Processor"). Ha nem rendelkezik metódussal, hibaüzenetet fogunk kapni, ha igen, akkor egy további ablakban kiválaszthatóvá válnak. Amennyiben lehet paraméterezni a "Bemenő paraméterek" ("Edit In Parameters") gombbal ezeket is megadhatjuk. Végül a "Végrehajtás!" ("Execute!") gombbal lehet futtatni a metódust.

WMI cikksorozat