Windows - Adott WMI osztály összes tulajdonságának és metódusának megjelenítése

forráskód letöltése
Cikkeinkben számos alkalommal használtuk a WMI (Windows Management Instrumentation) szolgáltatás osztályait és azok valamely tulajdonságát vagy metódusát. Általában jellemző, hogy Windows XP alatt több tulajdonsága érhető el, mint Windows 2000 alatt és még több, mint Windows NT alatt. A bonyolultság tökéletes, hibátlan referencia nélkül meglehetősen nehéz eligazodni a kavalkádban. Ezen szeretnénk segíteni az alábbi szkripttel, mely a megadott WMI osztály összes elérhető tulajdonságát, metódusát megjeleníti, típusokkal együtt.
Cikkünkhöz mellékeltük a tárgyalásra kerülő szkriptet "ClassQuery.vbs" néven. Futtatása a "Start.bat" fájllal történik a sok megjelenő sor miatt és nem közvetlenül a szkripttel. A lekérdezés eredményét a "Results.txt"-be menti és a Notepad-el jeleníti meg.
Kezdésnek definiáljunk két változót: egyik tárolja a lekérdezendő osztály névterét (strNameSpace), ami a tulajdonképpeni "tartózkodási" helye. Második tárolja magát az osztályt (strClass). Alábbi példánkban a "Win32_OperatingSystem"-et fogjuk használni, mely az operációs rendszerről tárol általános adatokat. Az "strClass" változóba más értéket írva (pl.: "Win32_Services" - a szolgáltatásokkal kapcsolatos műveletekhez) kérdezhetünk le más osztályokat.
strNameSpace = "root\cimv2"
strClass = "Win32_OperatingSystem"
Létre kell hozni egy az osztályra mutató objektumpéldányt.
Set objClass = GetObject("winmgmts:\\.\" & strNameSpace & ":" & strClass)
Először a lehetséges tulajdonságokat fogjuk lekérni. Készítsünk egy fejlécet a jobb láthatóság kedvéért.
WScript.Echo
WScript.Echo "--------------------------------------------"
WScript.Echo strClass & " Tulajdonságok"
WScript.Echo "--------------------------------------------"
Minden tulajdonságot lássunk el sorszámmal, az első kapja az 1-es számot.
i = 1
Egy FOR ciklussal végignézzük a fent definiált objektum (objClass) összes paraméterét, mely tulajdonság típusú (Properties_).
For Each objClassProperty In objClass.Properties_
Megjelenítjük a sorszámot és a paraméter nevét (Name), ez egyenlő a tulajdonság nevével.
 WScript.Echo i & ". " & objClassProperty.Name
Szükségünk lesz még egy ciklusra az egyéb paraméterek lekérdezéséhez. Például az adott tulajdonság típusának (string, uint32, date, stb.), írhatóságának (Write = Igaz vagy Write = True) ismerete is nélkülözhetetlen a programozáshoz. Tulajdonságonként változik, hogy hány darab és milyen összetevőkből álló egyéb paramétere van, ezért kell a ciklus.
  For Each objPropertyQualifier In objClassProperty.Qualifiers_
   If VarType(objPropertyQualifier.Value) = (vbVariant + vbArray) Then
     strQualifier = objPropertyQualifier.Name & " = " & Join(objPropertyQualifier.Value, ",")
    Else
     strQualifier = objPropertyQualifier.Name & " = " & objPropertyQualifier.Value
   End If
   WScript.Echo strQualifier
Gondoskodjunk a ciklusok lezárásáról.
   strQualifier = ""
   j = j + 1
  Next
 WScript.Echo
 i = i + 1
Next
Következzenek a metódusok. Ismét készítsünk fejlécet.
WScript.Echo
WScript.Echo "--------------------------------------------"
WScript.Echo strClass & " Metódusok"
WScript.Echo "--------------------------------------------"
Ezeket is sorszámozzuk.
i = 1
Az előbbiekhez képes annyi az eltérés, hogy nem a "Properties_", hanem a "Methods_" értékeit kell kiolvasni.
For Each objClassMethod In objClass.Methods_
 WScript.Echo i & ". " & objClassMethod.Name
  For Each objMethodQualifier In objClassMethod.Qualifiers_
   If VarType(objMethodQualifier.Value) = (vbVariant + vbArray) Then
     strQualifier = objMethodQualifier.Name & " = " & Join(objMethodQualifier.Value, ",")
    Else
     strQualifier = objMethodQualifier.Name & " = " & objMethodQualifier.Value
   End If
   WScript.Echo strQualifier
   strQualifier = ""
  Next
 WScript.Echo
 i = i + 1
Next
Pillantsunk bele a kapott eredménybe és nézzük meg néhány tulajdonság leírását:
1. BootDevice
CIMTYPE = string
MappingStrings = Win32API|DRIVE_MAP_INFO|btInt13Unit
read = Igaz
_
2. BuildNumber
CIMTYPE = string
MappingStrings = Win32API|System Information Structures|OSVERSIONINFOEX|dwBuildNumber
read = Igaz
_
3. BuildType
CIMTYPE = string
MappingStrings = Win32Registry|Software\Microsoft\Windows\CurrentVersion|CurrentType
read = Igaz
Illetve néhány metódusét:
1. Reboot
Implemented = Igaz
MappingStrings = Win32API|System Shutdown Functions|ExitWindowsEx|EWX_REBOOT
Override = Reboot
Privileges = SeShutdownPrivilege
ValueMap = 0,..
_
2. Shutdown
Implemented = Igaz
MappingStrings = Win32API|System Shutdown Functions|ExitWindowsEx|EWX_SHUTDOWN
Override = Shutdown
Privileges = SeShutdownPrivilege
ValueMap = 0,..
_
3. Win32Shutdown
Implemented = Igaz
MappingStrings = Win32API|System Shutdown Functions|ExitWindowsEx
Privileges = SeShutdownPrivilege
ValueMap = 0,..
Látható, hogy gyakorlatilag minden adat megjelenik, mely a programból vagy szkriptből való felhasználáshoz szükséges. A CIMTYPE jelenti a típust, a WRITE az írhatóságot (a READ gyakorlatilag mindenhol elérhető). A metódusoknál látjuk, hogy milyen jogok szükségesek a sikeres futtatáshoz (pl.: SeShutdownPrivilege), milyen értékeket vehet fel paraméterként (ValueMap), stb.