HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A Windows Management Instrumentation (WMI) lekérdezőnyelvének bemutatása


WQL 1. rész

Példaprogram letöltése

2584 bájt

A Windows Management Instrumentation (WMI) szolgáltatást használók számára nélkülözhetetlen a Windows Management Instrumentation Query Language (WQL) lekérdezőnyelv ismerete. Cikksorozatunkban ismertetjük a nyelv elemeit, gyakorlati példákon keresztül bemutatva működésüket. Az első részben a lekérdezés típusokat fogjuk tárgyalni.

Cikkünkhöz mellékelve megtalálhatók a példákban szereplő szkriptek:
"Variables.vbs" - Megjeleníti a képernyőn az operációs rendszerben definiált környezeti változókat és értékeiket.
"Events.vbs" - Futtatása után csak egy "Várakozás eseményre" feliratú ablak látható, ha azonban történik egy bejegyzés a Windows eseménynaplójába, egy további ablakban láthatóvá válnak a hozzá tartozó főbb tulajdonságok.
Egy adatbázisban szereplő adatok elérésének programozói, fejlesztői szinten az egyik legelterjedtebb módja az SQL lekérdező nyelv használata. Az SQL szó a Structured Query Language rövidítéséből keletkezett, amit magyarra strukturált lekérdező nyelvnek szoktak fordítani. Egy utasítás halmazról van szó, amelyekkel egy adatbázis adatai különböző feltételek szerint elérhetők, módosíthatók, törölhetők, létrehozhatók. Az adatkezelésen túlmenően magának az adatbázisnak a létrehozására, törlésére és szerkezetének megváltoztatására is van mód. Támogatott továbbá a tranzakció kezelés, amit azt jelenti, hogy az adatbázisban végzett változtatások egy bizonyos szintig visszavonhatók, helyreállítva az eredeti állapotot. Természetesen mindehhez szükséges az adatbázismotor támogatása is.
Az SQL nyelvnek többféle megvalósulása létezik. A WMI az ANSI SQL (American National Standards Institute Structured Query Language) utasításkészletét ismeri, de nem tartalmazza ebből az összes parancsot és néhány apróbb szemantikai változtatást is végeztek rajta. Az így keletkezett SQL nyelv neve WQL a WMI Query Language rövidítéseként.
A WQL a következő három lekérdezés típust támogatja:
Adat lekérdezés (Data Query)
Mindközül a leggyakrabban használt típus. Az SQL nyelv készítésének eredeti célját: egy adatbázisban szereplő adatok elérését valósítja meg.
Például a környezeti változókat tároló adatbázisból megtudjuk a változók nevét és értékeiket (is):
A lekérdezés legalapvetőbb módja a "mutass meg mindet ebből az osztályból" elv. A "Win32_Environment" osztály kezeli a környezeti változókat. SQL nyelven mindez így néz ki: "SELECT * FROM Win32_Environment". Kerekítsünk ebből egy szkriptet. Jelenítse meg a képernyőn egy ablakban az operációs rendszerben található összes környezeti változót, tegyen mindegyik után egy "=" jelet és írja utána a hozzá tartozó értéket. Hozzunk létre egy "Variables" nevű változót, inicializáljuk üres sztringként. Egyetlen FOR ciklussal haladjunk végig az osztály elemein. A lekérdezés eredményét adjuk hozzá a változóhoz és végül az egészet írassuk ki a képernyőre:
Variables=""
for each Env in GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery ("select * from Win32_Environment")
   Variables = Variables + Env.Name & " = " & Env.VariableValue & Chr (13)
Next
   WScript.Echo Variables
Esemény lekérdezés (Event Query)
Nem statikus, hanem dinamikus adatok lekérdezéséről van szó. Amikor "történik valami" generálódik az operációs rendszerben egy esemény. Lehet egy egér kattintás, billentyű lenyomás, de lehet a rendszerben futó számos program által gerjesztett változtatás is, például egy naplófájlba történő írás.
Készítsünk egy szkriptet annak figyelésére, hogy a Windows Eseménynaplójába (Event Viewer) történt-e bejegyzés:
Az eseménynaplózás a " Win32_NTLogEvent" osztály feladata. Ezen belül az "__InstanceCreationEvent" osztály egy esemény létrehozásakor készít egy úgynevezett jegyzőkönyvet. Event Query lekérdezésnél, SQL nyelven ez így néz ki: "SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'"
Már csak egy WMI szkriptet kell köré írni:
Az előzőnél bonyolultabban, összetettebben megvalósítható úgynevezett aszinkron lekérdezést kell készítenünk. Lényege, hogy a programkód nem várja meg, hogy az adott esemény bekövetkezzen, hanem tovább folytatódik, ellentétben a szinkron lekérdezésekkel. Hozzunk létre egy eljárást (SUB) a jegyzőkönyv ("objObject.TargetInstance.Message") képernyőn való megjelenítésére. Csak akkor hívjuk meg, ha a lekérdezés feltétele - bejegyzés az eseménynaplóba - teljesül.
Szükség lesz a "SWbemSink" típusú objektum egy példányának létrehozására. Sajátossága, hogy csak akkor hívódik meg, ha az aszinkron esemény műveletet végez.
A szkript:
Sub SINK_OnObjectReady(objObject, objAsyncContext)
    WScript.Echo (objObject.TargetInstance.Message)
End Sub
Set services = GetObject("WinMgmts:{impersonationLevel=impersonate, (security)}") 
Set sink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
services.ExecNotificationQueryAsync sink, _ 
"SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'"
WScript.Echo "Várakozás eseményre"
Futtatása után a képernyőn egy "OK" gombbal ellátott ablakban a "Várakozás eseményre" felirat látható. Ha rákattintunk a gombra a szkript futása véget ér. Próbáljuk ki a működését, futtassuk a szkriptet és tallózzunk el a Vezérlőpult > Felügyeleti eszközök > Eseménynapló (Control Panel > Administrative Tools > Event Viewer) konzolhoz.
Figyelem az alábbiakban törölni fogjuk a biztonsági napló bejegyzéseit! Nem ez az egyetlen lehetőség egy rendszeresemény kiváltására, de alapértelmezésben a helyi biztonsági házirend előírja ennek a ténynek a naplózását.
Kattintsunk a biztonsági naplóra (Security Log) a jobb oldali egérgombbal és lépjünk "Az összes esemény törlése" ("Clear all Events") menüsorra. A naplóbejegyzések mentéséhez adjunk igenlő választ a megjelenő kérdésre és mentsük az adatokat egy fájlba. Szkriptünk azonnal megjeleníti egy ablakban az esemény paramétereit. A Művelet > Naplófájl megnyitása (Action > Open Log File) utasítással töltsük vissza a naplóbejegyzéseket.
Séma lekérdezése (Schema Query)
A séma tárolja a WMI osztályok definícióját. Azt, hogy milyen szerkezetben, hogyan épül fel az osztály és milyen alosztályokat foglal magába. Leegyszerűsítve, amikor séma lekérdezést hajtunk végre, nem az adatokat, hanem az adatbázis szerkezetét tudjuk meg.
A forrás szerkezet kevésbé bonyolult, mint az eseménylekérdezésé, inkább az adat lekérdezéshez hasonlítható.
Alapszerkezete: "SELECT * FROM meta_class". A "meta_class" (=meta osztály) és az egyéb osztályok közötti különbség, hogy a meta osztályok a séma és nem az adatok lekérdezését teszik lehetővé.
A következő résztől kezdődően részletesen lépésről-lépésre bemutatjuk a lekérdezésekben használható utasításokat.



Könyv
Ez a cikk megtalálható ebben a könyvben: Windows Software Offline 2002 évkönyv 27. 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 |