Méthode SWbemServices.ExecNotificationQuery
La méthode ExecNotificationQuery de l’objet SWbemServices exécute une requête pour recevoir des événements. L’appel retourne immédiatement. L’utilisateur peut interroger l’énumérateur retourné pour les évènements au fur et à mesure qu’ils arrivent.
La méthode est appelée en mode semi-synchrone. Pour plus d’informations, consultez Appel d’une méthode.
Pour obtenir une explication de cette syntaxe, consultez Conventions de document pour l’API de script.
Syntaxe
objwbemEventsource = .ExecNotificationQuery( _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objWbemNamedValueSet ] _
)
Paramètres
-
strQuery
-
Obligatoire. Chaîne qui contient le texte de la requête liée aux événements. Ce paramètre ne peut pas être vide. Pour plus d’informations sur la création de chaînes de requête WMI, consultez Interrogation avec WQL et les informations de référence sur WQL.
-
strQueryLanguage [facultatif]
-
Chaîne qui contient le langage de requête à utiliser. Si elle est spécifiée, la valeur doit être « WQL ».
-
iFlags [facultatif]
-
Entier qui détermine le comportement de la requête. La valeur par défaut est wbemFlagReturnImmediately + wbemFlagForwardOnly. Si vous spécifiez ce paramètre, ce paramètre doit être défini sur wbemFlagReturnImmediately et wbemFlagForwardOnly, sinon l’appel échoue. Ce paramètre peut accepter les valeurs suivantes.
-
wbemFlagForwardOnly (32 (0x20))
-
Provoque le retour d’un énumérateur uniquement vers l’avant. Les énumérateurs de ce type sont généralement beaucoup plus rapides et utilisent moins de mémoire que les énumérateurs conventionnels, mais ils ne permettent pas les appels à SWbemObject.Clone_.
-
wbemFlagReturnImmediately (16 (0x10))
-
Provoque le retour immédiat de l’appel.
objWbemNamedValueSet [facultatif]
En règle générale, ceci n’est pas défini. Sinon, il s’agit d’un objet SWbemNamedValueSet dont les éléments représentent les informations de contexte qui peuvent être utilisées par le fournisseur répondant à la demande. Un fournisseur qui prend en charge ou requiert de telles informations doit documenter les noms de valeur reconnus, le type de données de la valeur, les valeurs autorisées et la sémantique.
Valeur retournée
Si aucune erreur ne se produit, cette méthode retourne un objet SWbemEventSource. Vous pouvez appeler la méthode SWbemEventSource.NextEvent pour récupérer les événements à mesure qu’ils arrivent.
Codes d’erreur
Une fois la méthode ExecNotificationQuery terminée, l’objet Err peut contenir l’un des codes d’erreur de la liste suivante.
-
wbemErrAccessDenied – 2147749891 (0x80041003)
-
L’utilisateur actuel n’est pas autorisé à afficher le jeu de résultats.
-
wbemErrFailed – 2147749889 (0x80041001)
-
Erreur non spécifiée.
-
wbemErrInvalidParameter - 2147749896 (0x80041008)
-
Un paramètre non valide a été spécifié.
-
wbemErrInvalidQuery - 2147749911 (0x80041017)
-
La syntaxe de requête n’est pas valide.
-
wbemErrInvalidQueryType – 2147749912 (0x80041018)
-
Le langage de la requête demandé n'est pas pris en charge.
-
wbemErrOutOfMemory – 2147749894 (0x80041006)
-
La mémoire disponible est insuffisante pour terminer cette opération.
Notes
Contrairement à la méthode SWbemServices.ExecQueryAsync, ExecNotificationQuery retourne des objets de type d’événement qui sont générés par des événements futurs plutôt que par des objets existants. Les objets d’événement que ExecNotificationQuery demande peuvent être intrinsèques (par exemple, __InstanceCreationEvent) ou extrinsèques (par exemple, les événements du fournisseur de registre comme les événements RegistryKeyChangeEvent ou SNMP). Pour plus d’informations, consultez Détermination du type d’événement à recevoir et Réception de notifications d’événements.
Le nombre de mots clés AND et OR utilisables dans les requêtes WQL est limité. La présence d’un grand nombre de mots clés WQL dans une requête complexe peut amener WMI à renvoyer le code d’erreur WBEM_E_QUOTA_VIOLATION comme valeur HRESULT. La limite des mots clés WQL dépend de la complexité de la requête.
Exemples
L’exemple de code VBScript suivant surveille les modifications apportées aux volumes sur un ordinateur local. Notez que Win32_VolumeChangeEvent est un événement extrinsèque défini par un fournisseur et non un événement intrinsèque défini par WMI. Pour plus d’informations, consultez Détermination du type d’événement à recevoir.
Set colMonitoredEvents = _
GetObject("Winmgmts:").ExecNotificationQuery_
("Select * from Win32_VolumeChangeEvent")
Do While i = 0
Set strLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo strLatestEvent.DriveName & "Time Created = " _
& strLatestEvent.Time_Created
Select Case strLatestEvent.EventType
Case 1
WScript.Echo "EventType = Configuration Changed"
Case 2
WScript.Echo "EventType = Device Arrival"
Case 3
WScript.Echo "EventType = Device Removal"
Case 4
WScript.Echo "EventType = Docking"
Case Else
WScript.Echo "Unrecognized EventType"
End Select
Loop
L’exemple de code VBScript suivant surveille la suppression du processus. Si vous supprimez un processus dans le Gestionnaire des tâches ou fermez une application, le script affiche un message. Notez que ce script interroge un événement intrinsèque défini par WMI : __InstanceDeletionEvent.
Set objWMIService = GetObject( _
"Winmgmts:{impersonationLevel=impersonate}" )
Set colMonitoredProcesses = _
objWMIService.ExecNotificationQuery( _
"SELECT * FROM __InstanceDeletionEvent WITHIN 10 WHERE " _
& "TargetInstance ISA 'Win32_Process'")
i = 0
Do While i < 11
Set strLatestProcess = colMonitoredProcesses.NextEvent
WScript.Echo strLatestProcess.TargetInstance.Name
WScript.Sleep 10000
i= i + 1
Loop
Spécifications
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows Vista |
Serveur minimal pris en charge |
Windows Server 2008 |
En-tête |
|
Bibliothèque de types |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |