SELECT-Anweisung für Ereignisabfragen

Sie können verschiedene SELECT-Anweisungen verwenden, um Ereignisinformationen abzufragen. Bei den Anweisungen kann es sich um grundlegende Anweisungen handeln oder sie können mehr einschränkend sein, um das von der Abfrage zurückgegebene Resultset einzugrenzen.

Das folgende Beispiel ist eine grundlegende SELECT-Anweisung, die zum Abfragen von Ereignisinformationen verwendet wird.

SELECT * FROM EventClass

Wenn ein Consumer eine Abfrage sendet, handelt es sich um eine Anforderung, über alle Vorkommen des durch EventClass dargestellten Ereignisses benachrichtigt zu werden. Diese Anforderung enthält eine Anforderung für Benachrichtigungen über alle System- und Nicht-System-Eigenschaften des Ereignisses. Wenn ein Ereignisanbieter eine Abfrage sendet, registriert er Unterstützung für das Generieren von Benachrichtigungen, wenn ein Ereignis auftritt, das durch EventClass dargestellt wird.

Consumer können einzelne Eigenschaften anstelle des Sternchens (*) in der SELECT-Anweisung angeben.

Das folgende Beispiel zeigt, wie bestimmte Eigenschaften abgefragt werden.

SELECT property_1, property_2, property_3 FROM MyEventClass

Alle Eigenschaften eines eingebetteten Objekts werden jedoch zurückgegeben, auch wenn die Abfrage Eigenschaften eines eingebetteten Objekts angibt.

Das folgende Beispiel zeigt zwei Abfragen, die dieselben Daten zurückgeben.

SELECT targetInstance FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"
SELECT targetInstance.Name FROM __InstanceCreationEvent within 2
    WHERE targetinstance isa "Win32_Process"

Wenn eine Systemeigenschaft für eine bestimmte Abfrage nicht relevant ist, enthält sie NULL. Beispielsweise ist der Wert der __RELPATH- Systemeigenschaft für alle Ereignisabfragen NULL.

Die folgenden Systemeigenschaften enthalten NULL für Ereignisabfragen:

\_\_Namespace \_\_Path \_\_RelPath \_\_Server

Weitere Informationen finden Sie unter WMI-Systemeigenschaftsreferenzen.

Alle Ereignisabfragen können eine optionale WHERE-Klausel enthalten, aber WHERE-Klauseln werden hauptsächlich von Consumern verwendet, um zusätzliche Filterung anzugeben. Es wird dringend empfohlen, dass Consumer immer eine WHERE-Klausel angeben. Die Kosten für eine komplexe Abfrage sind im Vergleich zu den Kosten für die Übermittlung und Verarbeitung nicht benötigter Benachrichtigungen minimal.

Das folgende Beispiel zeigt eine Abfrage, die Benachrichtigungen aller Instanzänderungsereignisse anfordert, die sich auf die hypothetische Klasse EmailEvent auswirken.

SELECT * FROM EmailEvent

Wenn Ereignisse im Zusammenhang mit EmailEvent häufig auftreten, wird der Consumer mit Ereignissen überflutet. Eine bessere Abfrage fordert Ereignisse nur an, wenn bestimmte Bedingungen Eigenschaften der angegebenen Klasse verwenden, z. B. wenn die Wichtigkeitsstufe hoch ist.

Das folgende Beispiel zeigt die Abfrage, die Sie verwenden können, wenn EmailImportance eine Eigenschaft der EmailEvent-Klasse ist.

SELECT * FROM EmailEvent WHERE EmailImportance > 3

Beachten Sie, dass WMI eine Abfrage aus einer Reihe von Gründen ablehnen kann. Die Abfrage kann beispielsweise für die Auswertung zu komplex oder ressourcenintensiv sein. In diesem Fall gibt WMI bestimmte Fehlercodes zurück, z. B. WBEM_E_INVALID_QUERY.

Eigenschaften eingebetteter Objekte können in der WHERE-Klausel verwendet werden.

Das folgende Beispiel zeigt, wie Sie Objekte abfragen, bei denen die TargetInstance-Eigenschaft der __InstanceModificationEvent-Systemklasse ein eingebettetes Win32_LogicalDisk-Objekt und FreeSpace eine Eigenschaft von Win32_LogicalDisk ist.

SELECT * FROM __InstanceModificationEvent WITHIN 600
    WHERE TargetInstance ISA "Win32_LogicalDisk" 
    AND   TargetInstance.FreeSpace < 1000000