Windows - WinMgmt szolgáltatás

WMI 2.rész

forráskód letöltése
A Windows Management Instrumentation-t (WMI) bemutató cikksorozatunk jelen részében a WinMgmt szolgáltatást ismertetjük. Ez egy interfész, amely kapcsolatot teremt az alkalmazások és a WMI információszolgáltató része között. Cikkünkhöz mellékeltünk egy példa szkriptet " Printers.vbs" néven. A WinMgmt használatával megjeleníti a képernyőn az operációs rendszerbe telepített nyomtatókat.
A WinMgmt szolgáltatás biztosítja a kapcsolatot a WMI ellátók (WMI Providers) és a kliens alkalmazások között. A WMI ellátók szolgáltatják az információt a Windows 2000 szoftver és hardver környezetéről. Hozzájuk csatlakozik kétirányú kapcsolattal a WinMgmt szolgáltatás. A kliens alkalmazások (MMC konzolok, szkriptek, XML, ODBC adapter) közvetlenül nem, csak a WinMgmt-n keresztül érhetik el az ellátókat.
Az első WMI lekérdezés alkalmával inicializálódik és rendszerindításkor automatikusan indul. Helyileg a %systemroot%\system32\WBEM\ mappában "WinMgmt.exe" néven található. Ugyanúgy, mint minden más szolgáltatás biztosít néhány konfigurálási lehetőséget ha eltallózunk a Vezérlőpult > Felügyeleti eszközök > Szolgáltatások (Control Panel > Administrative Tools > Services) nevű MMC konzolhoz. "Windows Management Instrumentation" néven találjuk meg a listában. Kétszer rákattintva megjelenik a tulajdonság ablaka, de nem ajánljuk, hogy itt bárki megváltoztasson valami. A szolgáltatás leállítása vagy paramétereinek megváltoztatása az egész operációs rendszer működésére hatással lesz.
A CTRL+ALT+DEL billentyűkombinációt lenyomása után megjelenő "Windows Feladatkezelő" ("Windows Task Manager"), "Folyamatok" ("Processes") oldalán található listában szerepel a "WinMgmt.exe" bejegyzés. Rendszer közeli szolgáltatásokkal egyező védelmet élvez ezért innen leállítani sem lehet. A Windows 2000 Resource Kit csomagjában található egy folyamat leállító segédprogram (Kill.exe). A Windows beépített lehetőségeinél többet nyújtva képes arra, hogy leállítsa a WinMgmt és hozzá hasonló folyamatokat. Nem programból, hanem kézzel a "Szolgáltatások" ("Services") MMC konzolon kikapcsolhatjuk.
A szolgáltatás parancssorból elérhető kapcsolókkal is rendelkezik a %systemroot%\system32\WBEM\WinMgmt.exe fájlon keresztül. Egy parancssori ablak elindítása után (WIN+R > cmd) az alábbi kapcsolók állnak rendelkezésre:
winmgmt /exe
Nem szolgáltatásként, hanem egyszerű alkalmazásként indítja a WinMgmt-t. Erre csak nagyon speciális esetben lehet szükség, például az ellátók (providers) nyomkövetésénél. Felvetődik néhány biztonsági probléma is, amíg szolgáltatásként fut "Helyi rendszerfiók" - "LocalSystem" jogokat birtokol. Ha alkalmazásként futtatjuk az indító felhasználó adataival fog futni. Bizonyos esetekben ez utóbbi nem biztosít megfelelő szintű jogosultságokat.
winmgmt /kill
A helyi gép összes WinMgmt folyamatát leállítja, még a "Feladatkezelő"-ből ("Task Manager") is eltűnik a bejegyzés. Maga az irányító főfolyamat azonban nem áll le és az első lekérdezés alkalmával automatikusan használható minden tovább. Beragadt, lefagyott mellékfolyamatokat lehet vele megszűntetni.
winmgmt /regserver
Bejegyzi a szolgáltatást a Windows regisztrációs adatbázisába. Alkalmazásként való futtatásnál kell használni, ha WMI kiszolgáló programot írunk.
winmgmt /unregserver
Az előbbi paraméterben meghatározott Registry bejegyzést távolítja el.
winmgmt /backup fájlnév
Fájlba menti a WMI Repository-t. Ha csak a fájlnevet adjuk meg a mentés a %systemroot%\system32 könyvtárba történik. Más helyre való mentéshez adjuk meg a teljes elérési utat.
winmgmt /restore fájlnév mode
Az elmentett Repository-t tölti vissza a "fájlnév" paraméterben megadott fájlból. A fájlnevet teljes elérési úttal kell használni. A jelenlegi Repository felülíródik. A "Mode" kapcsoló értéke lehet 0 (feltétel nélküli felülírás) és 1 (alapértelmezett felülírás). Windows XP rendszereken a két paraméter megegyezik.
A fenti kapcsolóknál feltűnt a Repository kifejezés. Magyarra fordítani raktárnak vagy tárháznak lehet. Ebből következik, hogy tároló funkciót valósít meg, méghozzá az elérhető objektumok szerkezetét leíró sémát tárolja. A CIM objektumkezelő használja a séma adatokat a WMI objektumok számára értelmezhető formában átalakítva az alkalmazásokból érkező kéréseket. Megvalósítva egy egységes kezelőfelületet. Elég az objektumok tulajdonságait és metódusait ismerni. Nem kell minden objektum egyéni megvalósításával foglalkozni függetlenül attól, hogy programból, szkriptből vagy MMC konzolról akarjuk elérni.
Végül a fentiek bemutatására írjunk egy szkriptet és kérjük le az operációs rendszerbe telepített nyomtatókat:
Első lépésben kapcsolatot kell teremteni a WinMgmts szolgáltatással.
set WMI = GetObject("WinMgmts:")
Nyomtatókról információt a "Win32_Printer" osztály tárol. Kapcsoljuk hozzá a WinMgmts-t.
set objs = WMI.InstancesOf("Win32_Printer")
Inicializáljunk egy változót üres sztringként.
Printers=""
Haladjunk végig az összes nyomtató példányon egy "for" ciklussal. A készülékek nevét a "Caption" tulajdonság tárolja.
for each obj in objs
   Printers = Printers & obj.Caption & Chr(13)
next
Végül az egészet írassuk ki a képernyőre.
WScript.Echo "A rendszerbe telepített nyomtatók:" & Chr(13) &  Chr(13) & Printers

WMI cikksorozat