Freigeben über


WITHIN-Klausel

Ereigniskonsumenten verwenden die WITHIN-Klausel in Ereignisabfragen, um ein Abrufintervall oder ein Gruppierungsintervallanzugeben.

Ein Abrufintervall ist das Intervall, das die Windows-Verwaltungsinstrumentation (WMI) zum Abrufen des Datenanbieters verwendet, der für die Klasse für systeminternen Ereignisseverantwortlich ist, von dem das abgefragte Ereignis Mitglied ist. Dieses Intervall ist die maximale Zeitspanne, die vor der Benachrichtigung eines Ereignisses übergeben werden kann. Ein Consumer verwendet ein Abrufintervall in einer WITHIN-Klausel, wenn der Consumer Benachrichtigungen über Änderungen an einer Klasse erfordert und ein Ereignisanbieter nicht verfügbar ist. Der Consumer registriert sich für ein systeminternes Ereignis und enthält das Abrufintervall.

Wenn Sie ein Abrufintervall angeben möchten, platzieren Sie die WITHIN-Klausel unmittelbar vor der WHERE-Klausel, wie im Folgenden dargestellt:

SELECT * FROM IntrinsicEventClass WITHIN interval  WHERE property = value

IntrinsicEventClass ist die systeminterne Ereignisklasse, von der das Ereignis mitglied ist, das Intervall das Abrufintervall ist, und der Wert ist der Wert für die Eigenschaft, für die der Consumer eine Benachrichtigung erfordert.

Das Abrufintervall ist eine Gleitkommazahl und kann Bruchzahlen sein, um Werte zu akzeptieren, die kleiner als 1 Sekunde sind. Das Intervall sollte jedoch eine Anzahl von Sekunden anstelle eines extrem kleinen Werts wie 0,001 darstellen, da das Angeben eines zu kleinen Werts dazu führen kann, dass WMI die Anweisung aufgrund der ressourcenintensiven Art der Abfrage als ungültig zurückweist. Da die meisten Ereigniskonsumenten keine sofortige Benachrichtigung erfordern, wird empfohlen, ein Intervall zu verwenden, das größer als 5 Minuten ist.

Im folgenden Abfragebeispiel wird von WMI alle 10 Sekunden auf Änderungen überprüft, die in Instanzen der Win32_LogicalDisk Klasse auftreten. Wenn eine Instanz der Klasse innerhalb des angegebenen Abrufintervalls geändert wird, wird für jede Änderung ein Benachrichtigungsereignis gesendet.

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

Je nach Abfrage kann ein Ereignisanbieter und WMI die Aufgabe zum Bereitstellen von Ereignissen freigeben. Beispielsweise ein Ereignisanbieter, der Ereignisse der __InstanceCreationEvent und __InstanceModificationEvent Systemklassen und nicht Ereignisse der __InstanceDeletionEvent Systemklasse unterstützt. Die folgende Abfrage ermöglicht es dem Ereignisanbieter, die Erstellungs- und Änderungsereignisse während des Auftretens zu generieren und beim Erstellen zu liefern. Mit der Abfrage kann WMI auch __InstanceDeletionEvent Ereignisse alle 10 (zehn) Sekunden mithilfe des Abrufmechanismus generieren.

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

Sie können auch die WITHIN-Klausel verwenden, um ein Gruppierungsintervall anzugeben. Ein Gruppierungsintervall ist eine nicht signierte 32-Bit-Ganzzahl, die den Zeitraum angibt, nachdem ein anfängliches Ereignis empfangen wurde, in dem WMI ähnliche Ereignisse sammeln sollte. Wenn dieser Zeitraum abläuft, liefert WMI das Aggregatereignis aus allen ähnlichen Ereignissen. Weitere Informationen finden Sie unter GROUP Clause.

Ereignis consumer that register for frequently occurring events use a grouping interval with the WITHIN clause. Das Hinzufügen von GROUP WITHIN zur WHERE-Klausel in einer Ereignisabfrage führt dazu, dass WMI anstelle vieler Ereignisse ein Aggregatereignis sendet. Das Aggregatereignis wird durch die __AggregateEvent Systemklasse dargestellt.

Um ein Gruppierungsintervall anzugeben, platzieren Sie die WITHIN-Klausel unmittelbar hinter der GROUP-Klausel.

SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval

EventClass ist die Ereignisklasse, deren Element das Ereignis ist. Der Wert ist der Wert für die Eigenschaft, für die der Consumer eine Benachrichtigung erfordert, und Interval ist das Gruppierungsintervall.

Weitere Informationen finden Sie unter Bestimmen des Ereignistyps, derempfangen werden soll.

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