SELECT-Anweisung für Ereignisabfragen
Sie können eine Vielzahl von SELECT-Anweisungen verwenden, um Ereignisinformationen abzufragen. Die Anweisungen können grundlegende Anweisungen sein, oder sie können restriktiver sein, um das von der Abfrage zurückgegebene Resultset einzuschränken.
Das folgende Beispiel ist eine einfache SELECT-Anweisung, die zum Abfragen von Ereignisinformationen verwendet wird.
SELECT * FROM EventClass
Wenn ein Consumer eine Abfrage sendet, ist es eine Anforderung, über alle Vorkommen des Ereignisses benachrichtigt zu werden, das durch EventClassdargestellt wird. Diese Anforderung enthält eine Anforderung zur Benachrichtigung über alle Ereignissystem- und Nichtsystemeigenschaften. Wenn ein Ereignisanbieter eine Abfrage sendet, registriert er die Unterstützung für das Generieren von Benachrichtigungen, wenn ein ereignis, das durch EventClass- dargestellt wird.
Consumer können einzelne Eigenschaften anstelle des Sternchens (*) in der SELECT-Anweisung angeben.
Das folgende Beispiel zeigt, wie Sie bestimmte Eigenschaften abfragen.
SELECT property_1, property_2, property_3 FROM MyEventClass
Alle Eigenschaften eines eingebetteten Objekts werden jedoch zurückgegeben, auch wenn die Abfrage eingebettete Objekteigenschaften 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 NULL- für alle Ereignisabfragen.
Die folgenden Systemeigenschaften enthalten NULL- für Ereignisabfragen:
- \_\_Namespace \_\_Path \_\_RelPath \_\_Server
Weitere Informationen finden Sie unter WMI-Systemeigenschaftsreferenz.
Alle Ereignisabfragen können eine optionale WHERE-Klauselenthalten. WHERE-Klauseln werden jedoch in erster Linie von Consumern verwendet, um zusätzliche Filterung anzugeben. Es wird dringend empfohlen, dass Verbraucher immer eine WHERE-Klausel angeben. Die Kosten einer komplexen Abfrage sind im Vergleich zu den Kosten für die Bereitstellung 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 EmailEventauswirken.
SELECT * FROM EmailEvent
Wenn Ereignisse, die mit EmailEvent- verbunden sind, häufig auftreten, wird der Verbraucher 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 Klasse EmailEvent-ist.
SELECT * FROM EmailEvent WHERE EmailImportance > 3
Beachten Sie, dass WMI eine Abfrage aus verschiedenen Gründen ablehnen kann. Die Abfrage kann beispielsweise zu komplex oder ressourcenintensiv für die Auswertung 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 ist und FreeSpace- eine Eigenschaft von Win32_LogicalDiskist.
SELECT * FROM __InstanceModificationEvent WITHIN 600
WHERE TargetInstance ISA "Win32_LogicalDisk"
AND TargetInstance.FreeSpace < 1000000