SWbemSink-Objekt

Das SWbemSink-Objekt wird von Clientanwendungen implementiert, um die Ergebnisse asynchroner Vorgänge und Ereignisbenachrichtigungen zu empfangen. Um einen asynchronen Aufruf auszufü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. Dieses Objekt wird durch den VBScript-Aufruf CreateObject erstellt.

Member

Das SWbemSink-Objekt weist die folgenden Typen von Membern auf:

Methoden

Das SWbemSink-Objekt verfügt über die folgenden Methoden.

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

Bemerkungen

Ein asynchroner Rückruf ermöglicht es nicht authentifizierten Benutzer*innen, 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 beim Auslösen von Ereignissen aufgerufen werden sollen. Wenn Sie beispielsweise jedes Objekt verarbeiten möchten, das von einem asynchronen Abfrageaufruf wie SWbemServices.ExecQueryAsync zurückgegeben wird, erstellen Sie eine Unterroutine mit 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, um Ereignisse und Triggerbeschreibungen zu identifizieren.

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 von einem 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 sofort an das Skript zurückgegeben. Die Verarbeitung der Abfrage wird in einem separaten Thread fortgesetzt, während das Skript sofort auf die zurückgegebenen Informationen reagiert. 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 reagiert. Für viele Objekte ist die semisynchrone Verarbeitung ausreichend. Wenn Sie beispielsweise ein Datenträgerlaufwerk nach seinen Eigenschaften abfragen, liegt möglicherweise nur ein Sekundenbruchteil zwischen dem Zeitpunkt, zu dem die Abfrage ausgegeben wird, und dem Zeitpunkt, zu dem die Informationen zurückgegeben werden und eine Reaktion darauf erfolgt. Dies ist größtenteils darauf zurückzuführen, dass die Menge der zurückgegebenen Informationen relativ gering ist.

Beim Abfragen eines Ereignisprotokolls kann die Zeitspanne zwischen dem Ausgeben der Abfrage und dem Zeitpunkt, zu dem ein semisynchrones Skript die Rückgabe und das Reagieren auf die Informationen beenden kann, jedoch Stunden dauern. Darüber hinaus kann es sein, dass dem Skript nicht genügend Arbeitsspeicher zur Verfügung steht und ein Fehler auftritt, bevor der Vorgang abgeschlossen ist.

Bei Ereignisprotokollen mit einer großen Anzahl von Datensätzen kann der Unterschied in der Verarbeitungszeit beträchtlich sein. Auf einem Windows 2000-basierten Testcomputer mit 2.000 Datensätzen im Ereignisprotokoll dauerte eine semisynchrone Abfrage, bei der alle Ereignisse abgerufen und in einem Befehlsfenster angezeigt wurden, 10 Minuten und 45 Sekunden. Eine asynchrone Abfrage zur Ausführung desselben Vorgangs dauerte 1 Minute und 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

Weitere Informationen

Objekte für die Skripterstellungs-API