HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A WMI lekérdezőnyelvének bemutatása - Where parancs és operátorai


WQL 3. rész

Példaprogram letöltése

2269 bájt

A Windows Management Instrumentation (WMI) lekérdezőnyelvét bemutató cikksorozatunkban elérkeztünk a WHERE parancs alkalmazásához. Segítségével feltételek alakíthatók ki a lekérdezésen belül, megtakarítva ezzel további programsorok írását. Példákon keresztül ismertetjük a feltételekben használható általános, logikai és speciális operátorok használatát

Cikkünkhöz mellékeltük a példában szereplő szkriptet, amelyet futtatva kiírja a rendszerben található NTFS fájlrendszerű kötetek betűjeleit és a még szabad lemezterületeket.
Minél nagyobb adatbázisban végezzük a lekérdezést, annál nagyobb a valószínűsége, hogy az eredményül kapott adathalmaz is nagy lesz. Az információ is elveszti elsődleges hasznát, ha feldolgozhatatlanul nagy mennyiségben van jelen. Megoldást a lekérdezések során alkalmazott szűrőfeltételek használata jelenti. Erre a célra szolgál a WHERE (=hol, ahol) parancs, amely segítségével csökkenthető, kiszűrhető a számunkra felesleges adat. A lekérdezések alapjába illeszkedik, ezért használható minden típusnál. Nézzük meg néhány példán keresztül a használatát. A rendszerben található kötetekről a WMI "Win32_LogicalDisk" osztályán keresztül kaphatunk információt. Kérdezzük le az összes kötet, minden ("*") adatát:
SELECT * FROM Win32_LogicalDisk
Van egy "FileSystem" nevű tulajdonság, amely kötetenként a fájlrendszer típusát (NTFS, FAT32, FAT, stb.) tárolja. Tegyük fel, hogy nekünk csak az NTFS rendszerű meghajtókra és betűjeleikre van szükségünk. Ha ragaszkodunk a fenti formulához, akkor további programsorok megírására lesz szükségünk annak kiszűrésére, hogy melyik NTFS kötet. Ennél sokkal egyszerűbb a WHERE utasítás alkalmazása:
SELECT * FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS'
Lefordítva: válasszuk ki az összes tulajdonságát a "Win32_LogicalDisk" osztálynak, ahol a fájlrendszer típusa NTFS. Finomítsuk tovább:
SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS'
Lefordítva: válasszuk ki a "Name" (ez tárolja a meghajtó betűjelet) és a "FreeSpace" (a köteten lévő üres hely mennyisége bájtban kifejezve) tulajdonságokat a "Win32_LogicalDisk" osztályból, ahol a fájlrendszer típusa NTFS. Végül az egészet ágyazzuk be egy szkriptbe:
Text="Elérhető NTFS rendszerű kötetek:" & Chr (13) & Chr (13)
for each Disk in GetObject( "winmgmts: {impersonationLevel = impersonate}" ).ExecQuery ( "SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS'")
   Text = Text & "Meghajtóbetűjel: " & Disk.Name & " Üres hely:" & Disk.Freespace & " byte" & Chr (13)
Next
   WScript.Echo Text
A VBszkriptek alapvetően dupla idézőjelet ("") használnak a sztringek megkülönböztetésére, de mivel az NTFS, mint eredmény is sztring típusú, ezért az egyszerű idézőjelek ('') használata válik szükségessé.


Lépjünk tovább:
Az előbb a legegyszerűbb feltételt ("FileSystem = 'NTFS'") alkalmaztuk. Azonban ezen túlmenően további operátorok használatára is van lehetőség. Az általános operátorok a következők:
= egyenlő
< kisebb mint
> nagyobb mint
<= kisebb vagy egyenlő
>= nagyobb vagy egyenlő
!= vagy <> nem egyenlő
Ezek alkalmazásával kitágulnak a lehetőségek. Főleg, ha hozzávesszük a logikaiakat (OR, AND, NOT, stb.) is. Nézzünk egy újabb példát: kérdezzük le azoknak az NTFS rendszerű köteteknek a meghajtó betűjelét és szabad területét, ahol a szabad terület mérete meghaladja a 3 GB-ot.
SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem = 'NTFS' and FreeSpace > 3000000000
Az egyszerűség kedvéért 1 GB-ot 1000000000 bájtnak számoltunk. A lekérdezést így fordíthatjuk: válasszuk ki a "Name" és a "FreeSpace" tulajdonságokat a "Win32_LogicalDisk" osztályból, ahol a fájlrendszer típusa NTFS ÉS a szabad hely mennyisége NAGYOBB MINT 1000000000 bájt.
Az operátorok tetszőleges kombinációjával is élhetünk, csak mindig vegyük figyelembe a matematikai végrehajtási sorrendet, és ha kell zárójelezzünk:
SELECT Name, FreeSpace FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") AND  FreeSpace > 3000000000  AND   FileSystem = "NTFS"
Lefordítva: válasszuk ki a "Name" és a "FreeSpace" tulajdonságokat a "Win32_LogicalDisk" osztályból, ahol a meghajtó betűjel "C:" VAGY "D:" ÉS a szabad hely mennyisége NAGYOBB MINT 3000000000 bájt ÉS a fájlrendszer típusa NTFS.
Speciális operátorok
Ha egy hivatkozásban szereplő mező nincs adattal feltöltve és mi pont erre vagyunk kíváncsiak, akkor jut szerephez az IS (van) és IS NOT (nincs) páros.
SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem IS NULL
Vagy
SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem IS NOT NULL
Hibás azonban a következő formula:
SELECT Name, Freespace FROM Win32_LogicalDisk WHERE FileSystem IS 'NTFS'
Ebben az esetben az egyenlőség jelet kell használni.
Az ISA operátor a lekérdezések minden típusánál (adat, esemény, séma) jelen van. Leggyakrabban a séma típusoknál használják. Lényege, hogy a lekérdezés nem csak az adott osztályt, hanem annak minden alosztályát érinti. Adat típusú lekérdezéseknél az adott objektumon és minden beágyazott alobjektumán végrehajtódik. Példa a sémalekérdezésre:
SELECT * FROM meta_class WHERE __this ISA 'CIM_Processor'
Csak esemény típusoknál van értelmezve a WITHIN operátor. Nem csak egyszer fut le a lekérdezés, hanem az utána megadott másodpercek lejárta után mindig (polling), egészen addig, amíg a szkript fut. Például az alábbi lekérdezés 5 másodpercenként végrehajtódik és ellenőrzi, hogy keletkezett-e esemény a "Win32_LogicalDisk" osztályban.
SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance ISA "Win32_LogicalDisk"



Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2002 évkönyv 64. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |