Teilen über


WHERE-Klausel (WMI)

Verwenden Sie die WHERE-Klausel, um den Bereich einer Daten-, Ereignis- oder Schemaabfrage einzugrenzen. Weitere Informationen finden Sie unter Abfragen mit WQL. Die WHERE-Klausel umfasst eine Eigenschaft oder ein Schlüsselwort, einen Operator und eine Konstante. In allen WHERE-Klauseln muss einer der vordefinierten Operatoren angegeben werden, die in der WMI-Abfragesprache (Windows Management Instrumentation Query Language, WQL) enthalten sind. Sie können die WHERE-Klausel in einem der folgenden Formate an die SELECT-Anweisung anfügen:

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

Dabei ist „*“ das abgefragte Element, „class“ die Klasse, in der die Abfrage erfolgen soll, und „constant“, „operator“ und „property“ stellen die zu verwendende Konstante, den Operator und die Eigenschaft oder das Schlüsselwort dar. Weitere Informationen zur SELECT-Anweisung finden Sie unter SELECT-Anweisung für Datenabfragen, SELECT-Anweisung für Ereignisabfragen und 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-Operatoren enthalten sein. In der WHERE-Klausel muss auf beiden Seiten des Operators entweder ein Eigenschaftenname oder eine Konstante angegeben werden.

Sie können in einer WHERE-Klausel Zeichenfolgenliterale (wie z. B. „NTFS“) verwenden. Wenn Sie die folgenden Sonderzeichen in Ihre Zeichenfolge einschließen möchten, müssen Sie das Zeichen zuerst mit einem Escapezeichen versehen, 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 Klasse Win32_LogicalDisk zurück, die NTFS-Laufwerke darstellen:

SELECT * FROM Win32_LogicalDisk WHERE FileSystem = "NTFS"

Eigenschaftennamen dürfen nicht auf beiden Seiten des Operators verwendet 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)

In den meisten Fällen, in denen Klassendeskriptoren in einer WHERE-Klausel verwendet werden, 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 Objekt ist:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Bei Vergleichstests wird die Groß-/Kleinschreibung grundsätzlich nicht berücksichtigt. Das heißt, die folgenden drei Anweisungen werden alle als TRUE ausgewertet:

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 einem der Werte 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

Bei den folgenden Beispielen handelt es sich um ungültige Abfragen, in denen versucht wird, 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

In einer WHERE-Klausel können mehrere Gruppen von Eigenschaften, Operatoren und Konstanten mithilfe von logischen Operatoren und eingeklammerten Unterausdrücken kombiniert werden. Jede Gruppe muss mit den Operatoren AND, OR oder NOT verknüpft werden, wie in den folgenden Abfragen gezeigt. Die erste Abfrage ruft alle Instanzen der Klasse Win32_LogicalDisk ab, bei denen die Eigenschaft Name entweder 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:“ ab, die noch über eine bestimmte Menge an freiem Speicherplatz und ein NTFS-Dateisystem verfügen:

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

Im folgenden Beispiel sehen Sie eine Schemaabfrage mit der WHERE-Klausel.

SELECT * FROM meta_class WHERE __this ISA "myClassName"

Die Klasse „meta_class“ identifiziert dies als Schemaabfrage, die Eigenschaft „__this“ identifiziert die Zielklasse der Abfrage, und der ISA-Operator fordert Definitionen für die Unterklassen der Zielklasse an. Daher gibt die vorherige Abfrage die Definition für die Klasse „myClassName“ und Definitionen für alle zugehörigen Unterklassen zurück.

Im folgenden Beispiel sehen Sie eine Datenabfrage, in der die ASSOCIATORS OF-Anweisung mit WHERE verwendet wird:

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

Im nächsten Beispiel sehen Sie eine Schemaabfrage mit ASSOCIATORS OF und WHERE:

ASSOCIATORS OF {myClass} WHERE SchemaOnly

Im folgenden Beispiel sehen Sie eine Datenabfrage, in der die REFERENCES OF-Anweisung und WHERE verwendet werden:

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

Im letzten Beispiel ist eine Schemaabfrage mit REFERENCES OF und WHERE dargestellt:

REFERENCES OF {myClass} WHERE SchemaOnly

Zusätzlich zum DATETIME-Format von WMI unterstützt die WQL-WHERE-Klausel mehrere andere Datums- und Uhrzeitformate: