WITHIN, clause

Les consommateurs d’événements utilisent la clause WITHIN dans les requêtes d’événements pour spécifier un intervalle d’interrogation ou un intervalle de regroupement.

Un intervalle d’interrogation est l’intervalle utilisé par Windows Management Instrumentation (WMI) pour interroger le fournisseur de données responsable de la classe des événements intrinsèques dont l’événement interrogé est membre. Cet intervalle est la durée maximale qui peut s'écouler avant que la notification d'un événement soit transmise. Un consommateur utilise un intervalle d’interrogation dans une clause WITHIN lorsque le consommateur exige d’être notifié des modifications apportées à une classe et qu’un fournisseur d’événements n’est pas disponible. Le consommateur s’inscrit pour un événement intrinsèque et inclut l’intervalle d’interrogation.

Pour spécifier un intervalle d’interrogation, placez la clause WITHIN juste avant la clause WHERE, comme ceci :

SELECT * FROM IntrinsicEventClass WITHIN interval  WHERE property = value

IntrinsicEventClass est la classe d’événements intrinsèques dont l’événement est membre, interval est l’intervalle d’interrogation et value est la valeur de la propriété sur laquelle le consommateur exige d’être notifié.

L’intervalle d’interrogation est un nombre à virgule flottante ; il peut être fractionnaire pour accepter des valeurs inférieures à 1 seconde. Cependant, l’intervalle doit représenter un nombre de secondes plutôt qu’une valeur extrêmement petite comme 0,001, car la spécification d’une valeur trop petite peut amener WMI à rejeter l’instruction comme étant non valide, en raison de la nature gourmande en ressources de l’interrogation. Sachant que la plupart des consommateurs d’événements n’exigent pas de notification immédiate, il est recommandé d’utiliser un intervalle supérieur à 5 minutes.

L’exemple de requête suivant demande à ce que WMI vérifie toutes les 10 secondes si des modifications se sont produites dans les instances de la classe Win32_LogicalDisk. Si une instance de la classe a été modifiée dans l’intervalle d’interrogation spécifié, un événement de notification est envoyé pour chaque modification.

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

Selon la requête, un fournisseur d’événements et WMI peuvent partager la tâche de fourniture d’événements. Par exemple, un fournisseur d’événements qui prend en charge les événements des classes système __InstanceCreationEvent et __InstanceModificationEvent, et non les événements de la classe système __InstanceDeletionEvent. La requête suivante permet au fournisseur d’événements de générer les événements de création et de modification au fur et à mesure qu’ils se produisent et de les remettre une fois qu’ils ont été créés. La requête permet également à WMI de générer des événements __InstanceDeletionEvent toutes les 10 (dix) secondes en utilisant le mécanisme d’interrogation.

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

Vous pouvez aussi utiliser la clause WITHIN pour spécifier un intervalle de regroupement. Un intervalle de regroupement est un entier de 32 bits non signé qui spécifie la période, après réception d’un événement initial, pendant laquelle WMI doit collecter des événements similaires. À l’expiration de cette période, WMI remet l’événement d’agrégation, composé de tous les événements similaires. Pour plus d’informations, consultez GROUP, clause.

Les consommateurs d’événements qui s’inscrivent à des événements fréquents utilisent un intervalle de regroupement avec la clause WITHIN. L’ajout de GROUP WITHIN à la clause WHERE d’une requête d’événement conduit WMI à envoyer un événement d’agrégation plutôt que plusieurs événements. L’événement d’agrégation est représenté par la classe système __AggregateEvent.

Pour spécifier un intervalle de regroupement, placez la clause WITHIN de suite après la clause GROUP.

SELECT * FROM EventClass WHERE property = value GROUP WITHIN Interval

EventClass est la classe d’événements dont l’événement est membre, value est la valeur de la propriété sur laquelle le consommateur exige d’être notifié, et interval est l’intervalle de regroupement.

Pour plus d’informations, consultez Détermination du type d’événement à recevoir.

Les consommateurs d’événements permanents ne peuvent être créés avec des requêtes d’interrogation que si vous disposez de privilèges d’administrateur.