WHERE, klauzula (WMI)
Użyj klauzuli WHERE, aby zawęzić zakres zapytania danych, zdarzenia lub schematu. Aby uzyskać więcej informacji, zobacz Querying with WQL. Klauzula WHERE składa się z właściwości lub słowa kluczowego, operatora i stałej. Wszystkie klauzule WHERE muszą określać jeden ze wstępnie zdefiniowanych operatorów, które są zawarte w języku zapytań instrumentacji zarządzania Windows (WMI) Query Language (WQL). Klauzulę WHERE można dołączyć do instrukcji SELECT przy użyciu jednej z następujących formularzy:
SELECT * FROM class WHERE property operator constant
SELECT * FROM class WHERE constant operator property
gdzie * jest elementem, którego dotyczy zapytanie, klasa jest klasą, w której należy wykonywać zapytania, a stałe, operator i właściwość są stałą, operatorem i właściwością lub słowem kluczowym do użycia. Aby uzyskać więcej informacji na temat instrukcji SELECT, zobacz SELECT Statement for Data Queries, SELECT Statement for Event Querieslub SELECT Statement for Schema Queries.
Wartość stałej musi być poprawnym typem właściwości. Ponadto operator musi znajdować się na liście prawidłowych operatorów WQL. Nazwa właściwości lub stała musi pojawić się po obu stronach operatora w klauzuli WHERE.
Można użyć literałów ciągów, takich jak "NTFS", w klauzuli WHERE. Jeśli chcesz uwzględnić następujące znaki specjalne w ciągu, musisz najpierw zmienić znak, prefiksując znak z ukośnikiem odwrotnym (\):
- ukośnik odwrotny (\\)
- cudzysłowy (\")
- apostrofy (\')
Nie można używać dowolnych wyrażeń arytmetycznych. Na przykład następujące zapytanie zwraca tylko wystąpienia klasy Win32_LogicalDisk reprezentujące dyski NTFS:
SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"
Nazwy właściwości nie mogą być wyświetlane po obu stronach operatora. Następujące zapytanie jest przykładem nieprawidłowego zapytania:
SELECT * FROM PhysicalDisk WHERE Partitions < (4 + 7 - 2)
OR (Partitions = SectorsPerTrack / 7)
W przypadku większości zastosowań deskryptorów klas w klauzuli WHERE usługa WMI flaguje zapytanie jako nieprawidłowe i zwraca błąd. Jednak użyj operatora kropki (.) dla właściwości typu obiektu w usłudze WMI. Na przykład następujące zapytanie jest prawidłowe, jeśli Prop jest prawidłową właściwością MyClass i jest typem obiektu:
SELECT * FROM MyClass WHERE Prop.embedprop = 5
Testy porównania są zawsze bez uwzględniania wielkości liter. Oznacza to, że wszystkie trzy następujące instrukcje oceniają true:
SELECT * FROM MyClass WHERE Prop1 = "cat"
SELECT * FROM MyClass WHERE Prop1 = "CAT"
SELECT * FROM MyClass WHERE Prop1 = "cAt"
Można utworzyć zapytanie zawierające typy danych logicznych, ale jedynymi prawidłowymi typami operandów logicznych są typy =, != i <>. Wartość true jest równoważna liczbie 1, a wartość FALSE jest równoważna liczbie 0. Poniższe przykłady to zapytania, które porównują wartość logiczną z wartościami true lub 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
Poniższe przykłady to nieprawidłowe zapytania, które próbują użyć nieprawidłowych operandów.
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
W klauzuli WHERE można łączyć wiele grup właściwości, operatorów i stałych przy użyciu operatorów logicznych i podexpressionów nawiasów. Każda grupa musi być połączona z operatorami AND, OR lub NOT , jak pokazano w poniższych zapytaniach. Pierwsze zapytanie pobiera wszystkie wystąpienia klasy Win32_LogicalDisk z właściwością Name ustawioną na C lub D:
SELECT * FROM Win32_LogicalDisk WHERE Name = "C:" OR Name = "D:"
Drugie zapytanie pobiera dyski o nazwie "C:" lub "D:" tylko wtedy, gdy mają pewną ilość wolnego miejsca i mają systemy plików NTFS:
SELECT * FROM Win32_LogicalDisk WHERE (Name = "C:" OR Name = "D:")
AND FreeSpace > 2000000 AND FileSystem = "NTFS"
W tym przykładzie pokazano zapytanie schematu przy użyciu klauzuli WHERE.
SELECT * FROM meta_class WHERE __this ISA "myClassName"
Klasa meta_class identyfikuje to jako zapytanie schematu, właściwość o nazwie __this identyfikuje klasę docelową zapytania, a operator ISA definicje żądań dla podklas klasy docelowej. W związku z tym powyższe zapytanie zwraca definicję dla klasy myClassName i definicji dla wszystkich jego podklas.
Poniższy przykład to zapytanie dotyczące danych przy użyciu instrukcji ASSOCIATORS OF z instrukcją WHERE:
ASSOCIATORS OF {myClass.keyVal="Value1"} WHERE ClassDefsOnly
W następnym przykładzie pokazano zapytanie schematu przy użyciu ASSOCIATORS OF i WHERE:
ASSOCIATORS OF {myClass} WHERE SchemaOnly
Poniższy przykład to zapytanie dotyczące danych przy użyciu instrukcji REFERENCES OF i WHERE:
REFERENCES OF {myClass.keyVal="Value1"}
WHERE RequiredQualifier = myQual
Ostatnim przykładem jest zapytanie schematu przy użyciu ODWOŁAŃ OF i WHERE:
REFERENCES OF {myClass} WHERE SchemaOnly
Oprócz formatu DATETIME usługi WMI klauzula WQL WHERE obsługuje kilka innych formatów daty i godziny:
- WQL-Supported formaty dat
- formaty czasu WQL-Supported