Megosztás a következőn keresztül:


WHERE záradék (WMI)

A WHERE záradék használatával szűkítheti egy adat-, esemény- vagy séma-lekérdezés hatókörét. További információ: Lekérdezés WQL-. A WHERE záradék egy tulajdonságból vagy kulcsszóból, egy operátorból és egy állandóból áll. Minden WHERE záradéknak meg kell adnia a Windows Management Instrumentation (WMI) lekérdezési nyelv (WQL) egyik előre definiált operátorát. A WHERE záradékot a SELECT utasításhoz az alábbi űrlapok egyikével fűzheti hozzá:

SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property

ahol * a lekérdezett elem, az osztály az az osztály, amelyben lekérdezhető, az állandó, az operátor és a tulajdonság pedig a használandó állandó, operátor és tulajdonság vagy kulcsszó. További információ a SELECT utasításról: SELECT utasítás adatmegkérdezésekhez, SELECT utasítás esemény-lekérdezésekhez, vagy SELECT utasítás séma-lekérdezésekhez.

Az állandó értékének a tulajdonság megfelelő típusának kell lennie. Ezenkívül az operátornak az érvényes WQL-operátorokközé kell tartoznia. Egy tulajdonságnévnek vagy egy állandónak az operátor mindkét oldalán meg kell jelennie a WHERE záradékban.

A WHERE záradékban sztringkonstansokat, például "NTFS"-t használhat. Ha a következő speciális karaktereket szeretné belefoglalni a sztringbe, először meg kell szabadulnia a karaktertől egy fordított perjel (\) előtaggal:

  • fordított perjel (\\)
  • dupla idézőjelek (\")
  • szimpla idézőjelek (\')

Tetszőleges aritmetikai kifejezések nem használhatók. Az alábbi lekérdezés például csak az NTFS-meghajtókat képviselő Win32_LogicalDisk osztály példányait adja vissza:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

A tulajdonságnevek nem jelennek meg az operátor mindkét oldalán. Az alábbi lekérdezés egy érvénytelen lekérdezésre mutat példát:

SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2) 
    OR   (Partitions = SectorsPerTrack / 7)

A WHERE záradék osztályleíróinak legtöbb használata esetén a WMI érvénytelenként jelöli meg a lekérdezést, és hibát ad vissza. Használja azonban a pont (.) operátort a WMI-ben objektum típusú tulajdonságokhoz. Az alábbi lekérdezés például akkor érvényes, ha a Prop a MyClass érvényes tulajdonsága, és objektum:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Az összehasonlító tesztek mindig érzéketlenek. Vagyis az alábbi három utasítás mind a TRUE értékeli ki:

SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"

Logikai adattípusokat tartalmazó lekérdezéseket is létrehozhat, de az egyetlen érvényes logikai operandustípus az =, != és <> típus. A TRUE értéke megegyezik az 1-es számmal, a HAMIS pedig a 0 számmal. Az alábbi példák olyan lekérdezések, amelyek logikai értéket hasonlítanak össze a TRUE vagy HAMIS értékekkel.

SELECT * FROM MyClass WHERE BoolProp = 1
SELECT * FROM MyClass WHERE BoolProp = TRUE
SELECT * FROM MyClass WHERE BoolProp <> FALSE
SELECT * FROM MyClass WHERE BoolProp = 0
SELECT * FROM MyClass WHERE BoolProp = FALSE
SELECT * FROM MyClass WHERE BoolProp != 1
SELECT * FROM MyClass WHERE BoolProp != FALSE
SELECT * FROM MyClass WHERE BoolProp <> FALSE

Az alábbi példák érvénytelen lekérdezéseket mutatnak be, amelyek érvénytelen operandusokat próbálnak használni.

SELECT * FROM MyClass WHERE BoolProp <= TRUE
SELECT * FROM MyClass WHERE BoolProp >= 0
SELECT * FROM MyClass WHERE BoolProp > FALSE
SELECT * FROM win32_computersystem WHERE infraredsupported >= null

A WHERE záradékban több tulajdonságcsoport, operátor és állandó kombinálható logikai operátorok és zárójeles alexpressziók használatával. Minden csoportot össze kell illeszteni az AND, OR vagy NOT operátorral, ahogy az az alábbi lekérdezésekben is látható. Az első lekérdezés lekéri a Win32_LogicalDisk osztály összes példányát, és a Name tulajdonság értéke C vagy D:

SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"

A második lekérdezés csak akkor kéri le a "C:" vagy a "D:" nevű lemezeket, ha bizonyos mennyiségű szabad terület van még bennük, és NTFS fájlrendszerrel rendelkeznek:

SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:") 
    AND  FreeSpace > 2000000  AND   FileSystem = "NTFS"

Ez a példa a WHERE záradékot használó séma-lekérdezést mutatja be.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Az osztály meta_class séma-lekérdezésként azonosítja, a __this nevű tulajdonság azonosítja a lekérdezés célosztályát, az ISA-operátor pedig a célosztály alosztályainak definícióit kéri le. Ezért az előző lekérdezés a myClassName osztály definícióját és az összes alosztály definícióját adja vissza.

Az alábbi példa egy adat lekérdezés, amely a ASSOCIATORS OF utasítást használja, a WHERE paranccsal:

ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly

A következő példa egy séma-lekérdezést mutat be az ASSOCIATORS OF és a WHERE használatával:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Az alábbi példa egy adat lekérdezés, amely a HIVATKOZÓ utasítás és a WHERE használatával történik:

REFERENCES OF {myClass.keyVal="Value1"} 
    WHERE RequiredQualifier = myQual

Ez az utolsó példa egy séma-lekérdezés, amely AZ ÉS HOL hivatkozásokat használ:

REFERENCES OF {myClass} WHERE SchemaOnly

A WMI DATETIME formátum mellett a WQL WHERE záradék számos más dátum- és időformátumot is támogat: