Sdílet prostřednictvím


Klauzule WHERE (WMI)

Pomocí klauzule WHERE můžete zúžit rozsah dat, událostí nebo dotazu schématu. Další informace najdete v tématu Dotazování pomocí jazyka WQL. Klauzule WHERE se skládá z vlastnosti nebo klíčového slova, operátoru a konstanty. Všechny klauzule WHERE musí určovat jeden z předdefinovaných operátorů, které jsou součástí dotazovacího jazyka WMI (Windows Management Instrumentation). Klauzuli WHERE můžete k příkazu SELECT připojit pomocí jednoho z následujících formulářů:

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

kde * je položka dotazována, třída je třída, ve které se má dotazovat, a konstanta, operátor a vlastnost jsou konstanta, operátor a vlastnost nebo klíčové slovo, které chcete použít. Další informace o příkazu SELECT naleznete v tématu PŘÍKAZ SELECT pro datové dotazy, PŘÍKAZ SELECT pro dotazy událostínebo PŘÍKAZ SELECT pro dotazy schématu.

Hodnota konstanty musí být správného typu vlastnosti. Kromě toho musí být operátor mezi seznamem platných operátorů WQL. Buď název vlastnosti, nebo konstanta musí být zobrazeny na obou stranách operátoru v klauzuli WHERE.

V klauzuli WHERE můžete použít řetězcové literály, například NTFS. Pokud chcete do řetězce zahrnout následující speciální znaky, je nutné nejprve uvést znak předponou zpětného lomítka (\):

  • zpětné lomítko (\\)
  • dvojité uvozovky (\")
  • jednoduché uvozovky (\')

Libovolné aritmetické výrazy nelze použít. Následující dotaz například vrátí pouze instance třídy Win32_LogicalDisk, které představují jednotky NTFS:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Názvy vlastností nelze zobrazit na obou stranách operátoru. Následující dotaz je příkladem neplatného dotazu:

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

Pro většinu použití popisovačů tříd v klauzuli WHERE služba WMI označí dotaz jako neplatný a vrátí chybu. Operátor tečka (.) však použijte pro vlastnosti typu objekt ve službě WMI. Například následující dotaz je platný, pokud prop je platná vlastnost MyClass a je typ objekt:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Srovnávací testy vždy nerozlišují malá a velká písmena. To znamená, že následující tři příkazy se vyhodnotí jako TRUE:

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

Můžete vytvořit dotaz, který obsahuje logické datové typy, ale jediným platnými typy logických operandů jsou typy =, != a <>. Hodnota TRUE odpovídá číslu 1 a hodnota FALSE odpovídá číslu 0. Následující příklady jsou dotazy, které porovnávají logickou hodnotu s hodnotami TRUE nebo FALSE.

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

Následující příklady jsou neplatné dotazy, které se pokoušejí použít neplatné operandy.

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

V klauzuli WHERE lze kombinovat více skupin vlastností, operátorů a konstant pomocí logických operátorů a závorek dílčích výrazů. Každá skupina musí být připojena k operátorům AND, OR nebo NOT , jak je znázorněno v následujících dotazech. První dotaz načte všechny instance třídy Win32_LogicalDisk s vlastností Name nastavenou na C nebo D:

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

Druhý dotaz načte disky s názvem "C:" nebo "D:", pouze pokud mají určitou část volného místa a mají systémy souborů NTFS:

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

Tento příklad ukazuje dotaz schématu pomocí klauzule WHERE.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Třída meta_class tuto vlastnost identifikuje jako dotaz schématu, vlastnost s názvem __this identifikuje cílovou třídu dotazu a operátor ISA definice požadavků pro podtřídy cílové třídy. Předchozí dotaz proto vrátí definici třídy myClassName a definice pro všechny její podtřídy.

Následující příklad je datový dotaz pomocí příkazu ASSOCIATORS OF where:

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

Následující příklad ukazuje dotaz schématu pomocí asociátorů OF a WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Následující příklad je datový dotaz pomocí příkazu REFERENCES OF a WHERE:

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

Tento poslední příklad je dotaz schématu s využitím ODKAZŮ OF a WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Kromě formátu WMI DATETIME podporuje klauzule WQL WHERE několik dalších formátů data a času: