Windows - WMI parancssor

Windows XP-ben megjelent a Windows Management Instrumentation (WMI) eléréséhez egy parancssori eszköz. Legfőbb jellemzőjeként megemlíthető, hogy készítői igyekeztek a WMI meglehetős bonyolultságát egyszerű parancsok segítségével lefedni. Cikkünkben áttekintést adunk a használatáról, ismertetve az utasítások kiadásának módját az alkalmazható üzemmódokban.
A WMI parancssor Windows XP alatt elsősorban azok számára áll rendelkezésre, aki nem ismerik mélyebben, de használni akarják a WMI szolgáltatást. Telepítése az első indítás alkalmával történik. Parancssorban írjuk be: WMIC és rövid idő elteltével használatba is vehetjük. Alapvetően kétféle üzemmódban működik: interaktív és nem interaktív. Interaktív módban csak saját parancsait érti meg, ezekkel viszont könnyen elérhetőek a WMI névterei. Nem interaktív módban ugyanúgy használható, mint egy bármilyen más parancssori utasítás (pl.: dir), csak a megfelelő paraméterezéséről kell gondoskodni. Előny, hogy programokba, szkriptekbe és batch fájlokba is beépíthető. A WMI osztályok elérése úgynevezett aliasokon keresztül történik. A felhasználónak elég csupán az aliast ismerni. Egy példán bemutatva:
Indítsunk el egy parancssori ablakot (Kellékek > Parancssor (Accessories > Command Prompt) vagy WIN+R > cmd). Írjuk be: WMIC. Ezzel interaktív üzemmódba lépünk. Listázzuk ki a rendszerben aktuálisan futó folyamatokat (processes) és elérési útjaikat. Nem kell mást tennünk, mint beírni az alábbi parancsot (tulajdonképpen aliast):
process
Ugyanez egy VBScript-el megvalósítva:
for each Proc in GetObject( "winmgmts:{ impersonationLevel=impersonate } ").ExecQuery ( "select * from Win32_Process" )
   WScript.Echo Proc.Name & " " & Proc.ExecutablePath
Next
Az első megoldás lényegesen egyszerűbb. Használható aliasokról listát a /? parancs beírásával kapunk. Mindegyik mellett található egy rövid magyarázó szöveg. Például a rendszerben található hangkártyák kilistázásához írjuk be:
sounddev
Egy lekérdezés nem csak ennyiből állhat. Az alias után megadhatók feltételek is. Például ellenőrizzük, hogy fut-e a Microsoft Word program pillanatnyilag a rendszerben. Ha igen, akkor a folyamatlistában "winword.exe" néven szerepel egy bejegyzés. Ehhez a "Win32_Process" osztály objektumpéldányainak "Name" tulajdonságát kell megvizsgálni.
process where name="winword.exe"
A megjelenő tulajdonságok is többféleképpen irathatók a képernyőre. Ehhez a "List" parancsot és egy további paramétert kell alkalmaznunk.
process where name="winword.exe" list full
Az alábbi kapcsolókat használhatjuk a "List" után: "Brief", "Full", "Instance", "IO", "Memory", "Statistics", "Status" és "System". Azt, hogy az aktuális parancsnál az osztály milyen tulajdonságait jeleníti meg az adott listázási mód, így tudjuk meg:
process where name="winword.exe" list /?
Nem csak a helyi gépről, hanem a hálózat másik gépeiről is lekérhetők információk. Külön érdekesség, hogy egyszerre többről is. Soroljuk fel a gépek neveit a "/node:" parancs után.
/node:gép1, gép2, gép3
Ezután adjuk ki például a "Process" parancsot. A képernyőn a felsorolt összes gépen futó folyamatok megjelennek. Működési feltétel, hogy a felhasználó megfelelő jogosultsági szinttel rendelkezzen minden gépen. Ha már a jogosultságnál tartunk, alapértelmezésben a WMI eléréséhez a WMIC átadja a futtató felhasználó nevét és jelszavát. Ha nem elégséges a jogosultsági szint, akkor sikertelen lesz a parancsvégrehajtás. Külön lehet állítani a megszemélyesítési és hitelesítési szintet. Előbbi az "Anonymous", "Identify", "Impersonate" és "Delegate", utóbbi pedig a "Default", "None", "Connect", "Call", "Pkt", "Pkintegrity" és "Pktprivacy" értékeket veheti fel. Példa a megszemélyesítési szint állítására:
/implevel:impersonate
Ehhez hasonló szintaxissal a hitelesítési szint is változtatható:
/authlevel:default
Ha nem rendelkezünk megfelelő jogosultsági szinttel, de birtokában vagyunk egynek, nem kell mást tennünk csak parancssoron belül átjelentkezni.
/user:rendszergazda
Ekkor a rendszer megkérdezi tőlünk a hozzá tartozó jelszót, amit megadhatunk még a következő módon is:
/password:jelszó
Ha törölni akarjuk a nevet és a jelszót, adjunk meg egy üres sztringet.
/user:""
A WMI objektumokat csoportosító névterek eléréséhez használhatjuk a "Namespace" parancsot. Alapértelmezésben a rendszer a \root\cimv2 névteret használja. Másikba (például a \root\security-ba) átjelentkezni így lehet
/namespace:\\root\security
Ha interaktív módban nem csak a képernyőre, hanem fájlba is akarjuk menteni a lekérdezések eredményét, akkor először meg kell adni a fájl nevét a "/record" utasítás után.
/record:c:\eredmény.txt
Ezt követően minden megjelenő eredmény a fájlba is belekerül. A fájlba történő listázás egy üres sztring megadásával szüntethető meg.
/record:""
Az osztályoknak nem csak a tulajdonságait lehet elérni, hanem a metódusaikat is lehet futtatni. Például a "Win32_Process" osztálynak van egy "Terminate" metódusa, amely a hatókörbe eső folyamatokat bezárja. Fentiekben lekértük, hogy fut-e a rendszerben a Word program. Egészítsük ezt ki úgy, hogy ha fut, akkor zárjuk be. Metódusokat a "Call" utasítással lehet meghívni.
process where name="winword.exe" call terminate
Térjünk át a nem interaktív üzemmód használatára. Interaktív módból lépjünk ki az "Exit" utasítás segítségével, ekkor visszakerülünk parancssorba. A fenti utasításokat ugyanúgy lehet használni itt is, csak elé kell írni a parancsértelmező nevét. Például:
wmic process
A futó folyamatok listázásához. Az eredmények fájlban való rögzítése itt már mehet a hagyományos módon.
wmic process>folyamatlista.txt