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 |
|
Typbibliothek |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |