SWbemSink-Objekt

Das SWbemSink-Objekt wird von Clientanwendungen implementiert, um die Ergebnisse asynchroner Vorgänge und Ereignisbenachrichtigungen zu empfangen. Um einen asynchronen Aufruf durchzuführen, müssen Sie eine Instanz eines SWbemSink-Objekts erstellen und als ObjWbemSink-Parameter übergeben. Die Ereignisse in Ihrer Implementierung von SWbemSink werden ausgelöst, wenn Status oder Ergebnisse zurückgegeben werden oder wenn der Aufruf abgeschlossen ist. Der VBScript-CreateObject-Aufruf erstellt dieses Objekt.

Member

Das SWbemSink-Objekt verfügt über diese Typen von Membern:

Methoden

Das SWbemSink-Objekt verfügt über diese Methoden.

Methode Beschreibung
Abbrechen Bricht alle asynchronen Vorgänge ab, die dieser Senke zugeordnet sind.

Hinweise

Ein asynchroner Rückruf ermöglicht es einem nicht authentifizierten Benutzer, Daten für die Senke bereitzustellen. Dies stellt Sicherheitsrisiken für Ihre Skripts und Anwendungen dar. Um die Risiken zu vermeiden, verwenden Sie entweder semisynchrone Kommunikation oder synchrone Kommunikation. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Ereignisse

Sie können Unterroutinen implementieren, die aufgerufen werden, wenn Ereignisse ausgelöst werden. Wenn Sie beispielsweise jedes Objekt verarbeiten möchten, das von einem asynchronen Abfrageaufruf wie SWbemServices.ExecQueryAsynczurückgegeben wird, erstellen Sie eine Unterroutine mithilfe der Senke, die im asynchronen Aufruf angegeben ist, wie im folgenden Beispiel gezeigt.

Sub SinkName_OnObjectReady(objObject, objAsyncContext)

Verwenden Sie die folgende Tabelle als Referenz zum Identifizieren von Ereignissen und Triggerbeschreibungen.

Ereignis Beschreibung
OnCompleted Wird ausgelöst, wenn ein asynchroner Vorgang abgeschlossen ist.
OnObjectPut Wird ausgelöst, wenn ein asynchroner Put-Vorgang abgeschlossen ist.
OnObjectReady Wird ausgelöst, wenn ein durch einen asynchronen Aufruf bereitgestelltes Objekt verfügbar ist.
OnProgress Wird ausgelöst, um den Status eines asynchronen Vorgangs bereitzustellen.

Asynchrones Abrufen von Ereignisprotokollstatistiken

WMI unterstützt sowohl asynchrone als auch semisynchrone Skripts. Beim Abrufen von Ereignissen aus den Ereignisprotokollen rufen asynchrone Skripts diese Daten häufig viel schneller ab.

In einem asynchronen Skript wird eine Abfrage ausgegeben, und die Steuerung wird sofort an das Skript zurückgegeben. Die Abfrage wird weiterhin in einem separaten Thread verarbeitet, während das Skript beginnt, sofort auf die zurückgegebenen Informationen zu reagieren. Asynchrone Skripts sind ereignisgesteuert: Jedes Mal, wenn ein Ereignisdatensatz abgerufen wird, wird das OnObjectReady-Ereignis ausgelöst. Wenn die Abfrage abgeschlossen ist, wird das OnCompleted-Ereignis ausgelöst, und das Skript kann basierend auf der Tatsache fortgesetzt werden, dass alle verfügbaren Datensätze zurückgegeben wurden.

In einem semisynchronen Skript wird dagegen eine Abfrage ausgegeben, und das Skript stellt dann eine große Menge abgerufener Informationen in die Warteschlange, bevor es darauf einwirken kann. Für viele Objekte ist die semisynchrone Verarbeitung ausreichend. Wenn Sie z. B. ein Laufwerk nach seinen Eigenschaften abfragen, kann es zwischen dem Zeitpunkt, zu dem die Abfrage ausgegeben wird, und dem Zeitpunkt, zu dem die Informationen zurückgegeben und reagiert werden, nur eine Sekundenbruchteile geben. Dies ist zu einem großen Teil darauf zurückzuführen, dass die Menge der zurückgegebenen Informationen relativ klein ist.

Beim Abfragen eines Ereignisprotokolls kann das Intervall zwischen dem Zeitpunkt, zu dem die Abfrage ausgegeben wird, und dem Zeitpunkt, zu dem ein semisynchrones Skript die Rückgabe beenden kann, und die Ausführung der Informationen stundenlang dauern. Darüber hinaus kann für das Skript nicht genügend Arbeitsspeicher vorhanden sein, und es kann selbst zu einem Fehler kommen, bevor es abgeschlossen wird.

Bei Ereignisprotokollen mit einer großen Anzahl von Datensätzen kann der Unterschied in der Verarbeitungszeit erheblich sein. Auf einem Windows 2000-basierten Testcomputer mit 2.000 Datensätzen im Ereignisprotokoll hat eine halbsynchrone Abfrage, die alle Ereignisse abgerufen und in einem Befehlsfenster angezeigt hat, 10 Minuten und 45 Sekunden gedauert. Eine asynchrone Abfrage, die den gleichen Vorgang ausgeführt hat, dauerte eine Minute 54 Sekunden.

Beispiele

Das folgende VBScript fragt die Ereignisprotokolle asynchron nach allen Datensätzen ab.

Const POPUP_DURATION = 10
Const OK_BUTTON = 0
Set objWSHShell = Wscript.CreateObject("Wscript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")
objWMIService.InstancesOfAsync objSink, "Win32_NTLogEvent"
errReturn = objWshShell.Popup("Retrieving events", POPUP_DURATION, _
"Event Retrieval", OK_BUTTON)
Sub SINK_OnCompleted(iHResult, objErrorObject, objAsyncContext)
 WScript.Echo "Asynchronous operation is done."
End Sub
Sub SINK_OnObjectReady(objEvent, objAsyncContext)
 Wscript.Echo "Category: " & objEvent.Category
 Wscript.Echo "Computer Name: " & objEvent.ComputerName
 Wscript.Echo "Event Code: " & objEvent.EventCode
 Wscript.Echo "Message: " & objEvent.Message
 Wscript.Echo "Record Number: " & objEvent.RecordNumber
 Wscript.Echo "Source Name: " & objEvent.SourceName
 Wscript.Echo "Time Written: " & objEvent.TimeWritten
 Wscript.Echo "Event Type: " & objEvent.Type
 Wscript.Echo "User: " & objEvent.User
End Sub

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
Windows Server 2008
Header
Wbemdisp.h
IDL
Wbemdisp.idl
DLL
Wbemdisp.dll
CLSID
CLSID _ SWbemSink
CLSID _ SWbemSinkEvents
IID
IID _ ISWbemSink
IID _ ISWbemSinkEvents

Siehe auch

Skripterstellung für API-Objekte