WITHIN-Klausel

Ereignisconsumer verwenden die WITHIN-Klausel in Ereignisabfragen, um ein Abrufintervall oder ein Gruppierungsintervall anzugeben.

Ein Abrufintervall ist das Intervall, das die Windows-Verwaltungsinstrumentation (WMI) verwendet, um den Datenanbieter abzurufen, der für die Klasse für systeminterne Ereignisse verantwortlich ist, der das abgefragte Ereignis angehört. Das Intervall ist der höchstzulässige Zeitraum, der vor dem Übermitteln einer Ereignisbenachrichtigung verstreichen darf. Ein Consumer verwendet ein Abrufintervall in einer WITHIN-Klausel, wenn der Consumer über Änderungen an einer Klasse benachrichtigt werden muss und kein Ereignisanbieter verfügbar ist. Der Consumer registriert sich für ein systeminternes Ereignis und schließt das Abrufintervall ein.

Platzieren Sie zum Angeben eines Abrufintervalls die WITHIN-Klausel unmittelbar vor der WHERE-Klausel, wie hier zu sehen:

SELECT * FROM IntrinsicEventClass WITHIN interval  WHERE property = value

„IntrinsicEventClass“ ist die systeminterne Ereignisklasse, der das Ereignis angehört, „interval“ ist das Abrufintervall, und „value“ ist der Wert für die Eigenschaft, über die der Consumer benachrichtigt werden soll.

Das Abrufintervall ist eine Gleitkommazahl und kann mit Kommastellen angegeben werden, um Werte zu akzeptieren, die kleiner als eine Sekunde sind. Das Intervall sollte jedoch eine Anzahl von Sekunden und nicht einen extrem kleinen Wert wie 0,001 darstellen. Die Angabe eines zu kleinen Werts kann nämlich dazu führen, dass WMI die Anweisung als ungültig ablehnt, weil Abrufvorgänge ressourcenintensiv sind. Da die meisten Ereignisconsumer keine sofortige Benachrichtigung benötigen, empfiehlt es sich, ein Intervall zu verwenden, das größer als fünf Minuten ist.

Im folgenden Abfragebeispiel soll WMI alle zehn Sekunden prüfen, ob Änderungen an Instanzen der Klasse Win32_LogicalDisk vorhanden sind. Wird eine Instanz der Klasse innerhalb des angegebenen Abrufintervalls geändert, wird für jede Änderung ein Benachrichtigungsereignis gesendet.

SELECT * FROM __InstanceModificationEvent WITHIN 10  WHERE TargetInstance ISA "Win32_LogicalDisk"

Abhängig von der Abfrage können sich ein Ereignisanbieter und WMI die Bereitstellung von Ereignissen teilen. Ein Beispiel wäre etwa ein Ereignisanbieter, der Ereignisse der Systemklassen __InstanceCreationEvent und __InstanceModificationEvent unterstützt, aber keine Ereignisse der Systemklasse __InstanceDeletionEvent. Mit der folgenden Abfrage kann der Ereignisanbieter die Erstellungs- und Änderungsereignisse generieren, sobald sie auftreten, und sie übermitteln, wenn sie erstellt werden. Außerdem kann WMI mit der Abfrage alle zehn Sekunden unter Verwendung des Abrufmechanismus Ereignisse vom Typ __InstanceDeletionEvent generieren.

SELECT * FROM __InstanceOperationEvent WITHIN 10  WHERE TargetInstance ISA "MyOwnClass"

Die WITHIN-Klausel kann auch zum Angeben eines Gruppierungsintervalls verwendet werden. Ein Gruppierungsintervall ist eine 32-Bit-Ganzzahl ohne Vorzeichen, die angibt, in welchem Zeitraum nach dem Empfang eines Anfangsereignisses WMI ähnliche Ereignisse sammeln soll. Nach Ablauf dieses Zeitraums liefert WMI das Aggregatereignis, das sich aus allen ähnlichen Ereignissen zusammensetzt. Weitere Informationen finden Sie unter GROUP-Klausel.

Ereignisconsumer, die sich für häufig auftretende Ereignisse registrieren, verwenden ein Gruppierungsintervall mit der WITHIN-Klausel. Das Hinzufügen von GROUP WITHIN zur WHERE-Klausel in einer Ereignisabfrage führt dazu, dass WMI ein einzelnes Aggregatereignis sendet (anstatt zahlreicher Ereignisse). Das Aggregatereignis wird durch die Systemklasse __AggregateEvent dargestellt.

Platzieren Sie zum Angeben eines Gruppierungsintervalls die WITHIN-Klausel unmittelbar nach der GROUP-Klausel.

SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval

„EventClass“ ist die Ereignisklasse, der das Ereignis angehört, „value“ ist der Wert für die Eigenschaft, über die der Consumer benachrichtigt werden soll, und „Interval“ ist das Gruppierungsintervall.

Weitere Informationen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses.

Permanente Ereignisconsumer können nur dann mit Abrufabfragen erstellt werden, wenn Sie über Administratorrechte verfügen.