Share via


GROUP-Klausel

Die GROUP-Klausel bewirkt, dass WMI eine einzelne Benachrichtigung generiert, die eine Gruppe von Ereignissen darstellt. Die repräsentative Benachrichtigung ist eine Instanz der __AggregateEvent-Systemklasse. Die __AggregateEvent-Systemklasse enthält zwei Eigenschaften: Representative und NumberOfEvents. Die Representative-Eigenschaft ist ein eingebettetes Objekt, das eine der Instanzen enthält, die während des in der WITHIN-Klausel angegebenen Gruppierungsintervalls empfangen wurden. Wenn beispielsweise ein aggregiertes Ereignis generiert wird, um Instanzänderungsereignisse zu benachrichtigen, enthält Representative eine Instanz der __InstanceModificationEvent-Klasse. Die NumberOfEvents-Eigenschaft enthält die Anzahl der Ereignisse, die während des Gruppierungsintervalls empfangen werden. Das Gruppierungsintervall gibt den Zeitraum an, in dem WMI ähnliche Ereignisse sammeln soll, nachdem ein erstes Ereignis empfangen wurde.

Die GROUP-Klausel muss eine WITHIN-Klausel enthalten, um das Gruppierungsintervall anzugeben, und kann das BY- oder HAVING-Schlüsselwort oder beide enthalten. Die GROUP-Klausel wird wie folgt nach der WHERE-Klausel platziert:

SELECT * FROM EventClass [WHERE property = value] 
    GROUP WITHIN interval [BY property_list]
    [HAVING NumberOfEvents operator integer]

Der EventClass-Wert ist die Ereignisklasse, deren Element das Ereignis ist, und value ist der Wert für die Eigenschaft, für die eine Benachrichtigung erforderlich ist. Das Intervall ist eine ganze Zahl ohne Vorzeichen, die das Gruppierungsintervall nach dem Empfang des ersten Ereignisses darstellt. Die ganze Zahl ohne Vorzeichen gibt eine Anzahl von Sekunden an. Die Eigenschaftenliste ist eine durch Trennzeichen getrennte Liste einer oder mehrerer Eigenschaften, die in der Ereignisklasse enthalten sind. Operator ist ein beliebiger relationaler Operator und integer ist eine 32-Bit-Ganzzahl ohne Vorzeichen, die eine Anzahl von Ereignissen angibt.

Bei Verwendung der GROUP-Klausel sind die Klauseln WHERE, BY und HAVING optional.

Eine einfache Verwendung der GROUP-Klausel kann eine Gruppierung von Ereignissen innerhalb eines Zeitintervalls anfordern, das mit dem Empfang des ersten Ereignisses startet. Die folgende Abfrage gruppiert beispielsweise alle E-Mail-Ereignisse, die innerhalb von fünf Minuten gesendet werden. Anstatt einen Benutzer bei jedem Empfang einer neuen E-Mail zu benachrichtigen, kann der permanente Consumer diese Abfrage verwenden, um den Benutzer nur zu informieren, wenn innerhalb der letzten fünf Minuten eine neue E-Mail empfangen wurde.

SELECT * FROM EmailEvent GROUP WITHIN 300

Wenn ausführlichere Informationen erforderlich sind, können Ereignisse nach einer oder mehreren Eigenschaften der Ereignisklasse gruppiert werden. Die folgende Abfrage fordert die Kombination von E-Mail-Ereignissen mit anderen Ereignissen an, die denselben Wert in der Sender-Eigenschaft aufweisen:

SELECT * FROM EmailEvent GROUP WITHIN 300 BY Sender

Durch Hinzufügen einer WHERE-Klausel kann eine noch größere Detailgenauigkeit erreicht werden. Die folgende Abfrage benachrichtigt beispielsweise einen Benutzer über eine neue E-Mail von einem bestimmten Absender, die innerhalb der letzten 10 Minuten eingetroffen ist, in Kombination mit anderen Ereignissen, die denselben Wert in der Importance-Eigenschaft aufweisen:

SELECT * FROM EventClass WHERE Sender = "MyBoss" 
  GROUP WITHIN 300 BY Importance