Freigeben über


SWbemServices.ExecNotificationQuery-Methode

Die ExecNotificationQuery-Methode des SWbemServices-Objekts führt eine Abfrage aus, um Ereignisse zu empfangen. Der Aufruf gibt sofort eine Antwort zurück. Der Benutzer kann den zurückgegebenen Enumerator nach Ereignissen abfragen, sobald diese eintreffen.

Die Methode wird im semisynchronen 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

objwbemEventsource = .ExecNotificationQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Parameter

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]

Dies ist eine ganze Zahl, die das Verhalten der Abfrage bestimmt. Der Standardwert ist wbemFlagReturnImmediately + wbemFlagForwardOnly. Wenn Sie diesen Parameter angeben, muss er sowohl auf wbemFlagReturnImmediately als auch wbemFlagForwardOnly festgelegt werden. Andernfalls tritt bei dem Aufruf ein Fehler auf. Dieser Parameter kann die folgenden Werte annehmen.

wbemFlagForwardOnly (32 (0x20))

Bewirkt, dass ein Forward-Only-Enumerator zurückgegeben wird. Forward-Only-Enumeratoren sind in der Regel viel schneller und verbrauchen weniger Arbeitsspeicher als herkömmliche Enumeratoren, lassen jedoch keine Aufrufe an SWbemObject.Clone_ zu.

wbemFlagReturnImmediately (16 (0x10))

Bewirkt, dass der Aufruf sofort eine Antwort zurückgibt.

objWbemNamedValueSet [optional]

Dies ist in der Regel nicht definiert. Andernfalls handelt es sich 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.

Rückgabewert

Wenn kein Fehler auftritt, gibt diese Methode ein SWbemEventSource-Objekt zurück. Sie können dann die NextEvent-Methode verwenden, um Ereignisse abzurufen, sobald sie eingehen.

Fehlercodes

Nach Abschluss derExecNotificationQuery-Methode enthält das Err-Objekt möglicherweise einen der Fehlercodes aus der folgenden Liste.

wbemErrAccessDenied – 2147749891 (0x80041003)

Der aktuelle Benutzer ist nicht berechtigt, das Resultset anzuzeigen.

wbemErrFailed – 2147749889 (0x80041001)

Unbekannter Fehler.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Ein ungültiger Parameter wurde 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

Im Gegensatz zur SWbemServices.ExecQueryAsync-Methode gibt ExecNotificationQuery Ereignistypobjekte zurück, die von zukünftigen Ereignissen und nicht von vorhandenen Objekten generiert werden. Die Ereignisobjekte, die von ExecNotificationQuery angefordert werden, können entweder systemintern (z. B. __InstanceCreationEvent) oder extrinsisch (z. B. Ereignisse des Registrierungsanbieters wie RegistryKeyChangeEvent oder SNMP-Ereignisse) sein. Weitere Informationen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses und Empfangen von Ereignisbenachrichtigungen.

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 als HRESULT-Wert zurückgibt. Der Grenzwert für WQL-Schlüsselwörter hängt davon ab, wie komplex die Abfrage ist.

Beispiele

Im folgenden VBScript-Codebeispiel werden Änderungen an Volumes auf einem lokalen Computer überwacht. Beachten Sie, dass Win32_VolumeChangeEvent ein extrinsisches Ereignis ist, das von einem Anbieter und nicht von einem systeminternen WMI-definierten Ereignis definiert wird. Weitere Informationen finden Sie unter Bestimmen des Typs des zu empfangenden Ereignisses.

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

Im folgenden VBScript-Codebeispiel wird das Löschen eines Prozesses überwacht. Wenn Sie einen Prozess im Task-Manager löschen oder eine Anwendung schließen, zeigt das Skript eine Meldung an. Beachten Sie, dass dieses Skript ein systeminternes Ereignis abfragt, das von WMI definiert wird – __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

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

SWbemEventSource.NextEvent

SWbemServices.ExecQuery

Empfangen eines WMI-Ereignisses

Abfragen mit WQL

WQL (SQL für WMI)

Bestimmen des Typs des zu empfangenden Ereignisses