SWbemServices.ExecNotificationQueryAsync method
La méthode ExecNotificationQueryAsync de l’objet SWbemServices exécute une requête pour recevoir des événements. Cet appel retourne immédiatement, et les résultats et l’état sont retournés à l’appelant par le biais d’événements remis au récepteur spécifié dans objWbemSink.
Les événements spécifiés dans la requête peuvent être des événements WMI (Windows Management Instrumentation) intrinsèques, tels que __InstanceCreationEvent, ou des événements extrinsèques, tels que Win32_IP4RouteTableEvent ou RegistryKeyChangeEvent. Pour plus d’informations, consultez Détermination du type d’événement à recevoir.
La méthode est appelée en mode asynchrone. 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
SWbemServices.ExecNotificationQueryAsync( _
ByVal objWbemSink, _
ByVal strQuery, _
[ ByVal strQueryLanguage ], _
[ ByVal iFlags ], _
[ ByVal objwbemNamedValueSet ], _
[ ByVal objWbemAsyncContext ] _
)
Paramètres
-
objWbemSink
-
Obligatoire. Récepteur d’objets qui reçoit la notification des événements de manière asynchrone. Créez un objet SWbemSink pour recevoir les objets.
-
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. Ce paramètre peut prendre les valeurs suivantes.
-
wbemFlagSendStatus (128 (0x80))
-
Provoque des appels asynchrones pour envoyer des mises à jour de l’état du récepteur d’objets au gestionnaire d’événements OnProgress.
-
wbemFlagDontSendStatus (0 (0x0))
-
Empêche les appels asynchrones d’envoyer des mises à jour d’état au gestionnaire d’événements OnProgress pour le récepteur d’objets.
objwbemNamedValueSet [optional]
En règle générale, ce 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 qui assure la maintenance de 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.
objWbemAsyncContext [facultatif]
Objet SWbemNamedValueSet qui est retourné au récepteur d’objets pour identifier la source de l’appel asynchrone d’origine. Utilisez ce paramètre pour effectuer plusieurs appels asynchrones à l’aide du même récepteur d’objets. Pour utiliser ce paramètre, créez un objet SWbemNamedValueSet et utilisez la méthode SWbemNamedValueSet.Add pour ajouter une valeur qui identifie l’appel asynchrone que vous effectuez. L’objet SWbemNamedValueSet est retourné au récepteur de l’objet et la source de l’appel peut être extraite à l’aide de la méthode SWbemNamedValueSet.Item. Pour plus d’informations, consultez Appel d’une méthode.
Valeur retournée
Cette méthode ne retourne pas de valeur. En cas de réussite, le récepteur reçoit un événement OnObjectReady par instance. Après la dernière instance, le récepteur d’objets reçoit un événement OnCompleted.
Codes d’erreur
Une fois la méthode ExecNotificationQueryAsync terminée, l’objet Err peut contenir l’un des codes d’erreur identifiés dans 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 est spécifié.
-
wbemErrInvalidQuery - 2147749911 (0x80041017)
-
La syntaxe de requête n’est pas valide.
-
wbemErrInvalidQueryType - 2147749912 (0x80041018)
-
Le langage de requête demandé n’est pas pris en charge.
-
wbemErrOutOfMemory - 2147749894 (0x80041006)
-
La mémoire disponible est insuffisante pour terminer cette opération.
Notes
La méthode ExecNotificationQueryAsync retourne des objets de type d’événement que les événements futurs génèrent. Les objets d’événement demandés par ExecNotificationQueryAsync peuvent être intrinsèques (par exemple, __InstanceCreationEvent) ou extrinsèques (par exemple, événements RegistryKeyChangeEvent ou SNMP). Pour plus d’informations, consultez Détermination du type d’événement à recevoir.
L’appel à ExecNotificationQueryAsync retourne immédiatement. Les objets et l’état demandés sont retournés à l’appelant par le biais de rappels remis au récepteur spécifié dans objWbemSink. Pour traiter chaque objet lorsqu’il est retourné, créez un objet objWbemSink. Sous-routine d’événement OnObjectReady. Une fois tous les objets retournés, effectuez le traitement final pour implémenter l’objet objWbemSink. Événement OnCompleted.
Un rappel asynchrone permet à un utilisateur non authentifié de fournir des données au récepteur. Cela présente des risques quant à la sécurité de vos scripts et applications. Pour éliminer les risques, consultez Définition de la sécurité sur un appel asynchrone.
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 montre un script qui attend une notification d’événement WMI indiquant qu’un processus s’est terminé. Il attend un événement intrinsèque WMI, une instance de la classe d’événements __InstanceDeletionEvent. Le __InstanceDeletionEvent doit représenter la suppression d’une instance de Win32_Process. Pour plus d’informations sur les événements intrinsèques WMI, consultez Détermination du type d’événement à recevoir.
Le script suivant s’exécute indéfiniment jusqu’à ce que l’ordinateur soit redémarré, que WMI soit arrêté ou que le script soit arrêté. Pour arrêter le script manuellement, utilisez le Gestionnaire des tâches pour arrêter le processus. Pour l’arrêter par programmation, utilisez la méthode Terminate dans la classe Win32_Process.
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & _strComputer & "\root\CIMV2")
Set MySink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
objWMIservice.ExecNotificationQueryAsync MySink, "SELECT * FROM __InstanceCreationEvent WITHIN 1 " _
& "WHERE TargetInstance ISA 'Win32_Process'"
WScript.Echo "Waiting for events..."
While (True)
Wscript.Sleep(1000)
Wend
Sub SINK_OnObjectReady(objObject, objAsyncContext)
WScript.Echo "Event occurred."
End Sub
Sub SINK_OnCompleted(objObject, objAsyncContext)
WScript.Echo "Event call complete."
End Sub
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 |