Freigeben über


WHERE-Klausel (WMI)

Verwenden Sie die WHERE-Klausel, um den Bereich einer Daten-, Ereignis- oder Schemaabfrage einzuschränken. Weitere Informationen finden Sie unter Abfragen mit WQL-. Die WHERE-Klausel besteht aus einer Eigenschaft oder einem Schlüsselwort, einem Operator und einer Konstante. Alle WHERE-Klauseln müssen einen der vordefinierten Operatoren angeben, die in der WMI-Abfragesprache (Windows Management Instrumentation) enthalten sind. Sie können die WHERE-Klausel mithilfe eines der folgenden Formulare an die SELECT-Anweisung anfügen:

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

dabei ist * das element, das abgefragt wird, die Klasse ist die Klasse, in der Abfragen und Konstanten, Operatoren und Eigenschaften die zu verwendende Konstante, der Operator und die Eigenschaft oder das Schlüsselwort sind. Weitere Informationen zur SELECT-Anweisung finden Sie unter SELECT-Anweisung für Datenabfragen, SELECT-Anweisung für Ereignisabfragenoder SELECT-Anweisung für Schemaabfragen.

Der Wert der Konstante muss vom richtigen Typ für die Eigenschaft sein. Darüber hinaus muss der Operator in der Liste der gültigen WQL-Operatorensein. Entweder ein Eigenschaftsname oder eine Konstante muss auf beiden Seiten des Operators in der WHERE-Klausel angezeigt werden.

Sie können Zeichenfolgenliterale wie "NTFS" in einer WHERE-Klausel verwenden. Wenn Sie die folgenden Sonderzeichen in die Zeichenfolge aufnehmen möchten, müssen Sie zunächst das Zeichen escapen, indem Sie dem Zeichen einen umgekehrten Schrägstrich (\) voranstellen:

  • umgekehrter Schrägstrich (\\)
  • doppelte Anführungszeichen (\")
  • einfache Anführungszeichen (\')

Beliebige arithmetische Ausdrücke können nicht verwendet werden. Die folgende Abfrage gibt beispielsweise nur die Instanzen der Win32_LogicalDisk Klasse zurück, die NTFS-Laufwerke darstellen:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Eigenschaftennamen können nicht auf beiden Seiten des Operators angezeigt werden. Die folgende Abfrage ist ein Beispiel für eine ungültige Abfrage:

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

Bei den meisten Verwendungen von Klassendeskriptoren in einer WHERE-Klausel kennzeichnet WMI die Abfrage als ungültig und gibt einen Fehler zurück. Verwenden Sie jedoch den Punktoperator (.) für Eigenschaften vom Typ Objekt in WMI. Die folgende Abfrage ist beispielsweise gültig, wenn Prop eine gültige Eigenschaft von MyClass ist und vom Typ Objektist:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Vergleichstests werden immer ohne Groß-/Kleinschreibung unterschieden. Das heißt, die folgenden drei Anweisungen werden als TRUEausgewertet:

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

Sie können eine Abfrage erstellen, die boolesche Datentypen enthält, aber die einzigen gültigen booleschen Operandentypen sind die Typen =, != und <>. Der Wert TRUE entspricht der Zahl 1, und der Wert FALSE entspricht der Zahl 0. Die folgenden Beispiele sind Abfragen, die einen booleschen Wert mit den Werten TRUE oder FALSE-vergleichen.

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

Die folgenden Beispiele sind ungültige Abfragen, die versuchen, ungültige Operanden zu verwenden.

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

Mehrere Gruppen von Eigenschaften, Operatoren und Konstanten können in einer WHERE-Klausel mithilfe logischer Operatoren und übergeordneter Unterausdrücke kombiniert werden. Jede Gruppe muss mit den Operatoren AND, OR oder NOT verknüpft werden, wie in den folgenden Abfragen dargestellt. Die erste Abfrage ruft alle Instanzen der Win32_LogicalDisk Klasse ab, wobei die eigenschaft Name auf C oder D festgelegt ist:

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

Die zweite Abfrage ruft Datenträger mit dem Namen "C:" oder "D:" nur ab, wenn sie einen bestimmten freien Speicherplatz haben und NTFS-Dateisysteme haben:

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

Dieses Beispiel zeigt eine Schemaabfrage mithilfe der WHERE-Klausel.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Die Klasse meta_class identifiziert dies als Schemaabfrage, die Eigenschaft mit dem Namen __this identifiziert die Zielklasse der Abfrage und den ISA-Operator Anforderungsdefinitionen für die Unterklassen der Zielklasse. Daher gibt die vorherige Abfrage die Definition für die myClassName-Klasse und Definitionen für alle unterklassen zurück.

Das folgende Beispiel ist eine Datenabfrage mit der ASSOCIATORS OF-Anweisung mit WHERE:

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

Das nächste Beispiel zeigt eine Schemaabfrage mit ASSOCIATORS OF und WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Das folgende Beispiel ist eine Datenabfrage mit der REFERENCES OF-Anweisung und WHERE:

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

Dieses letzte Beispiel ist eine Schemaabfrage mit REFERENCES OF und WHERE:

REFERENCES OF {myClass} WHERE SchemaOnly

Neben dem WMI-DATETIME--Format unterstützt die WQL WHERE-Klausel mehrere andere Datums- und Uhrzeitformate: