Windows - A CIM modell és a névterek használata

WMI 4.rész

A Windows Management Instrumentation (WMI) szolgáltatásról szóló cikksorozatunk mai részében a WMI felépítéséről lesz szó. Ismertetjük a Common Information Modell (CIM) jellemzőit és részeit. Bemutatjuk a névterek (namespace) használatát VBScript-ben és kitérünk olyan adminisztratív feladatokra, mint a WMI tárház mentése, névtér jogosultságok és alapértelmezések beállítása.
Cikkünkhöz mellékeltük az alábbiakban tárgyalásra kerülő VBScript-et "Processor.vbs" néven. Futtatva kiírja a rendszerben található processzorok nevét, órajelét, aktuális kihasználtságát százalékban mérve, a másodszintű gyorsítótár méretét és sebességét.
Common Information Model (CIM) - Általános Információs Modell
A CIM modell a WMI szolgáltatás egy bővíthető, objektum orientált adatmodellje. Az egész WMI felépítésének tárolására szolgál. Programozási nyelv független, így VBScript-ektől kezdve a Delphi-n át a C#-ig mindenhonnan elérhető. Teljes objektum orientáltságának köszönhetően nem szükséges tudnunk, hogy mi van egy objektum belsejében. Tulajdonságain és metódusain keresztül vezérelhető és kérhető információ róla. Ezen kívül a különböző részek örököltethetők és ezzel új objektumok állíthatók elő. Mint a legtöbb objektum orientált modellben, itt is találhatók osztályok. A CIM ezek három szintjét határozza meg:
1. Core
Az objektumok kezelését megvalósító osztályok csoportja. Jelen vannak a kezelés minden területén, de csak alapszintű funkciókkal rendelkeznek. Ilyen például a "_SystemSecurity" osztály, amely a különböző névterekhez (erre a kifejezésre még visszatérünk) való hozzáférést szabályozza.
2. Common
Az előző csoporthoz viszonyított különbség, hogy az objektumkezelés egy adott területét valósítja meg. Emellett a hozzá tartozó osztályok függetlenek az egyéni megvalósításoktól és technológiáktól. Ilyen például a "CIM_UnitaryComputerSystem" osztály, amelyből további osztályokat származtatva mintegy alapként szolgál a meglévő funkcióival (lásd következő csoport).
3. Extended
A kibővített jellemzőkkel rendelkező osztályokat foglalja magába. Ezek már nem függetlenek a különböző platformok megvalósításaitól. Ilyen például a "CIM_UnitaryComputerSystem" osztályból származtatott "Win32_ComputerSystem" osztály, amely többek között az adott rendszer nevét, hozzá fűzött megjegyzést, tartomány vagy munkacsoport nevét írja le.
Továbbá a WMI támogatja az osztály kapcsolatokat (asszociációkat) két vagy több tag esetén is. Ezzel csökken a mérete, mert nem kell ugyanazt az információt többször tárolni.
A WMI egészének felépítését leíró osztályokat közös néven sémának nevezzük. Szerepe ugyanaz, mint az Active Directory sémának, hogy meghatározza hová, milyen adat helyezhető el. Mindez bővíthetően, megváltoztathatóan. A WMI-t leíró séma osztályokat két csoportra osztjuk. Az egyik "CIM__" a másik "WIN32__" előtaggal kezdődik. Előbbi a "Core" és "Common", utóbbi az "Extended" osztálycsoportok leírásait tartalmazza.
Névterek (Namespaces)
A WMI a könnyebb áttekinthetőség végett az elérhető osztályokat logikai egységekbe, úgynevezett névterekbe helyezi. Ez a fajta csoportosítás különbözik az előbbi besorolásoktól. A névterek felépítése leginkább a meghajtók könyvtárszerkezetéhez hasonlít. Ugyanolyan faszerkezetről beszélünk. A hierarchia tetején a Root (gyökér) tárolóval, amely magában foglalja a teljes névteret. Minden innen indul ki, például az alapértelmezett névtér a "root\cimv2". A névterek egyenként osztályok és osztály példányok csoportjait tartalmazzák. Például ha információt akarunk kérni a számítógépben található processzorról (vagy processzorokról), akkor a "Win32_Processor" osztály tulajdonságait kell lekérdeznünk. Maga az osztály az alapértelmezett névtérben található, ezért elérése: "Win32_Processor" ha más névteret tettünk alapértelmezetté, akkor: "root\cimv2: Win32_Processor".
Írjunk egy VBScript-et, amellyel lekérdezzük a rendszerben található processzorok néhány adatát úgymint: neve, órajele, aktuális kihasználtsága, másodszintű gyorsítótár mérete és sebessége:
Futtatunk egy FOR ciklust - mert lehet, hogy nem csak egy CPU van a gépben, hanem több - és lekérdezzük az összes "Win32__Processor" osztálypéldányt. Definiálunk egy "Text" változót, amelyhez hozzáadjuk a tulajdonságokat és némi magyarázó szöveget. Végül az egészet megjelenítjük a képernyőn:

Text=""
for each CPU in GetObject("winmgmts:{impersonationLevel=impersonate} !root/cimv2").ExecQuery ("select * from Win32_Processor")
   Text = Text & CPU.Name & Chr (13)
   Text = Text & "Órajel " & CPU.MaxClockSpeed & " MHz" & Chr (13)
   Text = Text & "Aktuális kihasználtság " & CPU.LoadPercentage & " %" & Chr (13)
   Text = Text & "L2 Cache mérete "& CPU.L2CacheSize & " Kilóbájt" & Chr (13)
   Text = Text & "L2 Cache sebessége " & CPU.L2CacheSpeed & " MHz" & Chr (13)
Next
   WScript.Echo Text
Jól látszik a szkriptben, hogy hol és hogy határoztuk meg a "root/cimv2" névtér használatát. Tekintve, hogy általában ez van beállítva alapértelmezettként a "!root/cimv2" elhagyása esetén is működik. Többször említettük már az alapértelmezett névtér kifejezést, de vajon hogy lehet alapértelmezetté tenni egy névteret? Akár a grafikus felületről elérhető egyik MMC konzollal is. Kattintsunk az Asztal "Sajátgép" ("My Computer") ikonjára a jobb oldali egérgombbal és a megjelenő menüben válasszuk a "Kezelés" ("Manage") sort (ugyanide jutunk a Vezérlőpult > Felügyeleti eszközök > Számítógép-kezelés (Control Panel > Administrative Tools > Computer Management) útvonalon is). Keressük meg a Szolgáltatások és kiszolgálói alkalmazások > WMI-vezérlő (Services and Applications > WMI Control) sort. Kattintsunk rá a jobb oldali egérgombbal és válasszuk a "Tulajdonságok" ("Properties") menüt. Rövid várakozás következik mialatt a konzol hozzákapcsolódik a WMI szolgáltatáshoz. Ezt követően megjelenik egy ablak, ahol lépjünk a "Speciális" ("Advanced") oldalra. Találunk egy ilyen sort: "A parancsfájlok alapértelmezett névtere" ("Default namespace for scripting"). Alatta pedig látható a hozzá tartozó beállítás.
Megváltoztatásához kattintsunk a "Módosítás" ("Change") gombra. A megjelenő újabb ablak listájában található faszerkezetet kibontva elénk tárul a teljes WMI névtér. Itt jelölhető ki, hogy melyiket akarjuk alapértelmezetté tenni.
A névterek hozzáférési jogosultságai
Az NTFS ACL listájával megegyezően beállítható az összes névtérre, hogy kik és milyen jogosultsággal férhetnek hozzá. Ehhez kattintsunk a tulajdonság ablak "Biztonság" ("Security") fülre. Ismét láthatóvá válik a névtér faszerkezete. Válasszuk ki a megfelelő objektumot és kattintsunk a "Biztonság" ("Security") gombra. Ezután a megjelenő hozzáférési listában beállíthatók az elérési jogok.
Biztonsági másolat készítés a teljes névtér szerkezetről
Még mindig a tulajdonság ablaknál járva, kattintsunk a "Biztonsági mentés és visszaállítás" ("Backup/Restore") fülre. Alapértelmezésben 30 percenként automatikusan készül biztonsági mentés. Ezt az oldal egyetlen jelölőnégyzetének kikapcsolásával letilthatjuk vagy az idő intervallumot megváltoztathatjuk. A mentést a rendszer a %systemroot%\system32\WBEM\Repository mappába végzi "CIM.REC" fájlnévvel. Ezt megváltoztatni nem tudjuk, de a "Biztonsági másolat készítése most" ("Back Up Now") gombra kattintva elvégezhetünk egy kézi mentést tetszőleges helyre, tetszőleges fájlnévvel.

WMI cikksorozat