WHERE-Klausel (WMI)

Verwenden Sie die WHERE-Klausel, um den Bereich einer Daten-, Ereignis- oder Schemaabfrage zu engen. 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 Windows Management Instrumentation (WMI) Query Language (WQL) enthalten sind. Sie können die WHERE-Klausel mit einer der folgenden Formen an die SELECT-Anweisung anfügen:

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

Wobei das abgefragte Element ist, ist class die Klasse, in der abgefragt werden soll, und constant, operator und property sind die Konstante, der Operator und die Zu verwendende Eigenschaft oder * das Schlüsselwort. Weitere Informationen zur SELECT-Anweisung finden Sie unter SELECT-Anweisungfür Datenabfragen, SELECT-Anweisungfür Ereignisabfragen oder SELECT-Anweisung für Schemaabfragen.

Der Wert der Konstante muss den richtigen Typ für die Eigenschaft haben. Darüber hinaus muss der -Operator in der Liste der gültigen WQL-Operatoren enthalten sein. Entweder ein Eigenschaftenname 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 eingeben möchten, müssen Sie das Zeichen zunächst mit Escapezeichen verketten, indem Sie dem Zeichen einen zurückgestellten Schrägstrich () vorangestellt \ haben:

  • schräger 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"

Eigenschaftsnamen 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 und ein Typobjekt ist:

SELECT * FROM MyClass WHERE Prop.embedprop = 5

Bei Vergleichstests wird die Groß-/Kleinschreibung immer nicht beachtet. Das heißt, die folgenden drei Anweisungen werden alle zu 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 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 klammerischer Teilausdrucke kombiniert werden. Jede Gruppe muss mit den Operatoren AND, OR oder NOT verbunden werden, wie in den folgenden Abfragen gezeigt. Die erste Abfrage ruft alle Instanzen der Win32 _ LogicalDisk-Klasse ab, bei der die Name-Eigenschaft entweder auf C oder D festgelegt ist:

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

Die zweite Abfrage ruft Datenträger mit den Namen "C:" oder "D:" nur dann ab, wenn sie über eine bestimmte Menge an freiem Speicherplatz und NTFS-Dateisystemen verfügen:

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 Klassenmetaklasse identifiziert dies als Schemaabfrage, die Eigenschaft namens 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 myClassName-Klasse und Definitionen für alle ihre Unterklassen zurück.

Das folgende Beispiel ist eine Datenabfrage, die die ASSOCIATORS OF-Anweisung mit WHERE verwendet:

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, die die REFERENCES OF-Anweisung und WHERE verwendet:

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

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

REFERENCES OF {myClass} WHERE SchemaOnly

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