
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.
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.
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.