SWbemServices. ExecNotificationQueryAsync, méthode
La méthode ExecNotificationQueryAsync de l’objet SWbemServices exécute une requête pour recevoir des événements. Cet appel est retourné immédiatement et les résultats et l’État sont retournés à l’appelant via des é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 intrinsèques Windows Management Instrumentation (WMI), 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 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 d’événements de façon asynchrone. Créez un objet SWbemSink pour recevoir les objets.
-
strQuery
-
Obligatoire. Chaîne qui contient le texte de la requête relative 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 la référence WQL .
-
strQueryLanguage [ facultatif]
-
Chaîne qui contient le langage de requête à utiliser. S’il est spécifié, cette valeur doit être « WQL ».
-
IFlags [ facultatif]
-
Entier qui détermine le comportement de la requête. Ce paramètre peut être défini sur les valeurs suivantes.
-
wbemFlagSendStatus * * * * (128 (0x80))
-
Fait en sorte que les appels asynchrones envoient des mises à jour d’État au gestionnaire d’événements OnProgress pour le récepteur d’objets.
-
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 [ facultatif]
En général, ce n’est pas défini. Dans le cas contraire, 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 sert la demande. Un fournisseur qui prend en charge ou requiert ces 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]
Il s’agit d’un objet SWbemNamedValueSet qui retourne 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 d’objets 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 de retour
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
À la fin de la méthode ExecNotificationQueryAsync , 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 la requête n’est pas valide.
-
wbemErrInvalidQueryType -2147749912 (0x80041018)
-
Le langage de requête demandé n’est pas pris en charge.
-
wbemErrOutOfMemory -2147749894 (0x80041006)
-
Mémoire insuffisante pour terminer l’opération.
Notes
La méthode ExecNotificationQueryAsync retourne les objets de type d’événement générés par les événements futurs. Les objets d’événement que les demandes ExecNotificationQueryAsync peuvent être intrinsèques (par exemple, _ _ InstanceCreationEvent) ou extrinsèques (par exemple, les é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 via des rappels remis au récepteur spécifié dans objWbemSink. Pour traiter chaque objet lorsqu’il est retourné, créez un objWbemSink. Sous-routine d’événement OnObjectReady . Une fois tous les objets retournés, effectuez le traitement final pour implémenter le objWbemSink. Événement OnCompleted .
Un rappel asynchrone permet à un utilisateur non authentifié de fournir des données au récepteur. Cela pose des risques de sécurité pour vos scripts et vos applications. Pour éliminer les risques, consultez définition de la sécurité sur un appel asynchrone.
Il existe des limites concernant le nombre de mots clés and et or qui peuvent être utilisés dans les requêtes WQL. Un grand nombre de mots clés WQL utilisés dans une requête complexe peut faire en sorte que WMI retourne la valeur HRESULT Asan HRESULT du code d’erreur de _ _ _ violation de quota E WBEM . 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. _ _ InstanceDeletionEvent doit représenter la suppression d’une instance de _ processus Win32. 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 de _ processus Win32.
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
Configuration requise
| 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 |