SWbemServices.ExecNotificationQueryAsync-Methode

Die ExecNotificationQueryAsync-Methode des SWbemServices-Objekts führt eine Abfrage aus, um Ereignisse zu empfangen. Dieser Aufruf gibt sofort eine Antwort zurück, und die Ergebnisse und Status werden an die aufrufende Funktion durch Ereignisse zurückgegeben, die an die in objWbemSink angegebene Senke übermittelt werden.

Die in der Abfrage angegebenen Ereignisse können systeminterne WMI-Ereignisse (Windows Management Instrumentation, Windows-Verwaltungsinstrumentation) wie __InstanceCreationEvent oder extrinsische Ereignisse wie Win32_IP4RouteTableEvent oder RegistryKeyChangeEvent sein. Weitere Informationen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses.

Die Methode wird im asynchronen Modus aufgerufen. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skript-API.

Syntax

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

Parameter

objWbemSink

Erforderlich. Objektsenke, die die Ereignisbenachrichtigung asynchron empfängt. Erstellen Sie ein SWbemSink-Objekt, um die Objekte zu empfangen.

strQuery

Erforderlich. Zeichenfolge, die den Text der ereignisbezogenen Abfrage enthält. Dieser Parameter darf nicht leer sein. Weitere Informationen zum Erstellen von WMI-Abfragezeichenfolgen finden Sie unter Abfragen mit WQL sowie in der Referenz zu WQL.

strQueryLanguage [optional]

Zeichenfolge, die die zu verwendende Abfragesprache enthält. Wenn angegeben, muss dieser Wert „WQL“ sein.

iFlags [optional]

Ganze Zahl, die das Verhalten der Abfrage bestimmt. Dieser Parameter kann auf die folgenden Werte festgelegt werden.

wbemFlagSendStatus (128 (0x80))

Bewirkt, dass asynchrone Aufrufe Statusupdates an den OnProgress-Ereignishandler für die Objektsenke senden.

wbemFlagDontSendStatus (0 (0x0))

Verhindert, dass asynchrone Aufrufe Statusupdates an den OnProgress-Ereignishandler für die Objektsenke senden.

objwbemNamedValueSet [optional]

In der Regel nicht definiert. Andernfalls handelt es sich dabei um ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die von dem Anbieter verwendet werden können, der die Anforderung verarbeitet. Ein Anbieter, der solche Informationen unterstützt oder benötigt, muss die erkannten Wertnamen, den Datentyp des Werts, die zulässigen Werte und die Semantik dokumentieren.

objWbemAsyncContext [optional]

Dies ist ein SWbemNamedValueSet-Objekt, das an die Objektsenke zurückgegeben wird, um die Quelle des ursprünglichen asynchronen Aufrufs zu identifizieren. Verwenden Sie diesen Parameter, um mehrere asynchrone Aufrufe mithilfe derselben Objektsenke auszuführen. Erstellen Sie ein SWbemNamedValueSet-Objekt, um diesen Parameter zu nutzen, und verwenden Sie die SWbemNamedValueSet.Add-Methode, um einen Wert hinzuzufügen, der den asynchronen Aufruf identifiziert, den Sie ausführen. Das SWbemNamedValueSet-Objekt wird an die Objektsenke zurückgegeben, und die Quelle des Aufrufs kann mithilfe der SWbemNamedValueSet.Item-Methode extrahiert werden. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Rückgabewert

Diese Methode gibt keinen Wert zurück. Bei erfolgreicher Ausführung empfängt die Senke ein OnObjectReady-Ereignis pro Instanz. Nach der letzten Instanz empfängt die Objektsenke ein OnCompleted-Ereignis.

Fehlercodes

Nach Abschluss derExecNotificationQueryAsync-Methode enthält das Err-Objekt möglicherweise einen der Fehlercodes, die in der folgenden Liste angegeben sind.

wbemErrAccessDenied – 2147749891 (0x80041003)

Der aktuelle Benutzer ist nicht berechtigt, das Resultset anzuzeigen.

wbemErrFailed – 2147749889 (0x80041001)

Unbekannter Fehler.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Es ist ein ungültiger Parameter angegeben.

wbemErrInvalidQuery – 2147749911 (0x80041017)

Die Abfragesyntax ist ungültig.

wbemErrInvalidQueryType – 2147749912 (0x80041018)

Die angeforderte Abfragesprache wird nicht unterstützt.

wbemErrOutOfMemory – 2147749894 (0x80041006)

Es ist nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs vorhanden.

Bemerkungen

Die ExecNotificationQueryAsync-Methode gibt Ereignistypobjekte zurück, die zukünftige Ereignisse generieren. Die Ereignisobjekte, die von ExecNotificationQueryAsync angefordert werden, können systemintern (z. B. __InstanceCreationEvent) oder extrinsisch (z. B. RegistryKeyChangeEvent oder SNMP-Ereignisse) sein. Weitere Informationen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses.

Der Aufruf von ExecNotificationQueryAsync gibt sofort eine Antwort zurück. Die angeforderten Objekte und Status werden durch Rückrufe an die Senke, die in objWbemSink angegeben ist, an die aufrufende Funktion zurückgegeben. Erstellen Sie eine objWbemSink.OnObjectReady-Ereignisunterroutine, um jedes Objekt bei der Rückgabe zu verarbeiten. Nachdem alle Objekte zurückgegeben wurden, führen Sie die endgültige Verarbeitung durch, um das objWbemSink aus.OnCompleted-Ereignis zu implementieren.

Ein asynchroner Rückruf ermöglicht es einem nicht authentifizierten Benutzenden, Daten für die Senke bereitzustellen. Dies stellt Sicherheitsrisiken für Ihre Skripts und Anwendungen dar. Informationen zum Vermeiden der Risiken finden Sie unter Festlegen der Sicherheit für einen asynchronen Aufruf.

Es gibt Grenzwerte für die Anzahl von AND- und OR-Schlüsselwörtern, die in WQL-Abfragen verwendet werden können. Eine große Anzahl an WQL-Schlüsselwörtern, die in einer komplexen Abfrage verwendet werden, kann dazu führen, dass WMI den Fehlercode WBEM_E_QUOTA_VIOLATION Fehlercode als HRESULT-Wert zurückgibt. Der Grenzwert für WQL-Schlüsselwörter hängt davon ab, wie komplex die Abfrage ist.

Beispiele

Das folgende VBScript-Codebeispiel zeigt ein Skript, das auf eine WMI-Ereignisbenachrichtigung wartet, die angibt, dass ein Prozess beendet wurde. Es wartet auf ein systeminternes WMI-Ereignis, eine Instanz der Ereignisklasse __InstanceDeletionEvent. __InstanceDeletionEvent muss das Löschen einer Instanz von Win32_Process darstellen. Weitere Informationen zu systeminternen WMI-Ereignissen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses.

Das folgende Skript wird unbegrenzt ausgeführt, bis der Computer neu gestartet, WMI beendet oder das Skript beendet wird. Um das Skript manuell zu beenden, beenden Sie den Prozess mithilfe des Task-Managers. Verwenden Sie zum programmgesteuerten Beenden die Methode Terminate in der Win32_Process-Klasse.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
Windows Server 2008
Header
Wbemdisp.h
Typbibliothek
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Weitere Informationen

SWbemServices

SWbemServices.ExecQuery

SWbemServices.ExecQueryAsync

Registrieren für Systemregistrierungsereignisse

Bestimmen des Typs des zu empfangenden Ereignisses

Aufrufen einer Methode

Festlegen der Sicherheit für einen asynchronen Aufruf