Condividi tramite


Metodo SWbemServices.ExecNotificationQueryAsync

Il metodo ExecNotificationQueryAsync dell'oggetto SWbemServices esegue una query per ricevere gli eventi. Questa chiamata restituisce immediatamente e i risultati e lo stato vengono restituiti al chiamante tramite eventi recapitati al sink specificato in objWbemSink.

Gli eventi specificati nella query possono essere eventi intrinseci di Strumentazione gestione Windows (WMI), ad esempio eventi __InstanceCreationEvent o estrinsici, ad esempio Win32_IP4RouteTableEvent o RegistryKeyChangeEvent. Per altre informazioni, vedere Determinazione del tipo di evento da ricevere.

Il metodo viene chiamato in modalità asincrona. Per altre informazioni, vedere Chiamata di un metodo.

Per una spiegazione di questa sintassi, vedere Document Conventions per l'API di scripting.

Sintassi

SWbemServices.ExecNotificationQueryAsync( _
  ByVal objWbemSink, _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objwbemNamedValueSet ], _
  [ ByVal objWbemAsyncContext ] _
)

Parametri

objWbemSink

Obbligatorio. Sink oggetto che riceve la notifica degli eventi in modo asincrono. Creare un oggetto SWbemSink per ricevere gli oggetti .

strQuery

Obbligatorio. Stringa contenente il testo della query correlata all'evento. Questo parametro non può essere vuoto. Per altre informazioni sulla compilazione di stringhe di query WMI, vedere Esecuzione di query con WQL e informazioni di riferimento su WQL .

strQueryLanguage [facoltativo]

Stringa contenente il linguaggio di query da utilizzare. Se specificato, questo valore deve essere "WQL".

iFlags [facoltativo]

Intero che determina il comportamento della query. Questo parametro può essere impostato sui valori seguenti.

wbemFlagSendStatus (128 (0x80))

Fa sì che le chiamate asincrone inviino gli aggiornamenti dello stato al gestore eventi OnProgress per il sink dell'oggetto.

wbemFlagDontSendStatus (0 (0x0))

Impedisce alle chiamate asincrone di inviare aggiornamenti dello stato al gestore eventi OnProgress per il sink dell'oggetto.

objwbemNamedValueSet [facoltativo]

In genere, questo non è definito. In caso contrario, si tratta di un oggetto SWbemNamedValueSet i cui elementi rappresentano le informazioni di contesto che possono essere utilizzate dal provider che esegue la richiesta. Un provider che supporta o richiede tali informazioni deve documentare i nomi dei valori riconosciuti, il tipo di dati del valore, i valori consentiti e la semantica.

objWbemAsyncContext [facoltativo]

Si tratta di un oggetto SWbemNamedValueSet che restituisce al sink dell'oggetto per identificare l'origine della chiamata asincrona originale. Usare questo parametro per eseguire più chiamate asincrone usando lo stesso sink di oggetti. Per utilizzare questo parametro, creare un oggetto SWbemNamedValueSet e utilizzare il metodo SWbemNamedValueSet.Add per aggiungere un valore che identifica la chiamata asincrona eseguita. L'oggetto SWbemNamedValueSet viene restituito al sink dell'oggetto e l'origine della chiamata può essere estratta usando il metodo SWbemNamedValueSet.Item . Per altre informazioni, vedere Chiamata di un metodo.

Valore restituito

Questo metodo non restituisce valori. In caso di esito positivo, il sink riceve un evento OnObjectReady per ogni istanza. Dopo l'ultima istanza, il sink dell'oggetto riceve un evento OnCompleted .

Codici di errore

Dopo il completamento del metodo ExecNotificationQueryAsync , l'oggetto Err può contenere uno dei codici di errore identificati nell'elenco seguente.

wbemErrAccessDenied - 2147749891 (0x80041003)

L'utente corrente non è autorizzato a visualizzare il set di risultati.

wbemErrFailed - 2147749889 (0x80041001)

Errore non specificato.

wbemErrInvalidParameter - 2147749896 (0x80041008)

Parametro non valido specificato.

wbemErrInvalidQuery - 2147749911 (0x80041017)

La sintassi della query non è valida.

wbemErrInvalidQueryType - 2147749912 (0x80041018)

Il linguaggio di query richiesto non è supportato.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memoria insufficiente per completare l'operazione.

Commenti

Il metodo ExecNotificationQueryAsync restituisce oggetti tipo di evento generati da eventi futuri. Gli oggetti evento che le richieste ExecNotificationQueryAsync possono essere intrinseche (ad esempio , __InstanceCreationEvent) o estrinsiche (ad esempio, eventi RegistryKeyChangeEvent o SNMP). Per altre informazioni, vedere Determinazione del tipo di evento da ricevere.

La chiamata a ExecNotificationQueryAsync restituisce immediatamente. Gli oggetti e lo stato richiesti vengono restituiti al chiamante tramite callback recapitati al sink specificato in objWbemSink. Per elaborare ogni oggetto quando viene restituito, creare un oggetto objWbemSink. Subroutine dell'evento OnObjectReady . Dopo aver restituito tutti gli oggetti, eseguire l'elaborazione finale per implementare objWbemSink. Evento OnCompleted .

Un callback asincrono consente a un utente non autenticato di fornire dati al sink. Ciò comporta rischi per la sicurezza per gli script e le applicazioni. Per eliminare i rischi, vedere Impostazione della sicurezza in una chiamata asincrona.

Esistono limiti al numero di parole chiave AND e OR che possono essere usate nelle query WQL. Un numero elevato di parole chiave WQL usate in una query complessa può causare la restituzione di WMI al codice di errore WBEM_E_QUOTA_VIOLATION valore HRESULT disan. Il limite di parole chiave WQL dipende dalla complessità della query.

Esempio

Nell'esempio di codice VBScript seguente viene illustrato uno script in attesa di una notifica di evento WMI che indica che un processo è terminato. È in attesa di un evento intrinseco WMI, un'istanza della classe di evento __InstanceDeletionEvent. Il __InstanceDeletionEvent deve rappresentare l'eliminazione di un'istanza di Win32_Process. Per altre informazioni sugli eventi intrinseci WMI, vedere Determinazione del tipo di evento da ricevere.

Lo script seguente viene eseguito per un periodo illimitato fino a quando il computer non viene riavviato, WMI viene arrestato o lo script viene arrestato. Per arrestare manualmente lo script, usare Gestione attività per arrestare il processo. Per arrestarla a livello di codice, usare il metodo Terminate nella 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

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Intestazione
Wbemdisp.h
Libreria dei tipi
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Vedi anche

SWbemServices

SWbemServices.ExecQuery

SWbemServices.ExecQueryAsync

Registrazione per gli eventi del Registro di sistema

Determinazione del tipo di evento da ricevere

Chiamata di un metodo

Impostazione della sicurezza su una chiamata asincrona