Compartir a través de


Objeto SWbemSink

Las aplicaciones cliente implementan el objeto SWbemSink para recibir los resultados de operaciones asincrónicas y notificaciones de eventos. Para realizar una llamada asincrónica, debe crear una instancia de un objeto SWbemSink y pasarla como parámetro ObjWbemSink. Los eventos de la implementación de SWbemSink se desencadenan cuando se devuelven el estado o los resultados, o cuando se completa la llamada. La llamada CreateObject de VBScript crea este objeto.

Miembros

El objeto SWbemSink contiene estos tipos de miembros:

Métodos

El objeto SWbemSink tiene estos métodos.

Método Descripción
Cancelar Cancela todas las operaciones asincrónicas asociadas a este receptor.

Comentarios

Una devolución de llamada asincrónica permite a un usuario no autenticado proporcionar datos al receptor. Esto supone riesgos de seguridad para los scripts y las aplicaciones. Para eliminar los riesgos, use comunicación semisincrónica o sincrónica. Para obtener más información, consulte Llamada a un método.

Eventos

Puede implementar subrutinas a las que se llamará cuando se desencadenen eventos. Por ejemplo, si quiere procesar cada objeto devuelto por una llamada de consulta asincrónica, como SWbemServices.ExecQueryAsync, cree una subrutina mediante el receptor especificado en la llamada asincrónica, como se muestra en el ejemplo siguiente.

Sub SinkName_OnObjectReady(objObject, objAsyncContext)

Use la tabla siguiente como referencia para identificar eventos y descripciones de desencadenadores.

Evento Descripción
OnCompleted Se desencadena cuando se completa una operación asincrónica.
OnObjectPut Se desencadena cuando se completa una operación Put asincrónica.
OnObjectReady Se desencadena cuando un objeto proporcionado por una llamada asincrónica está disponible.
OnProgress Se desencadena para proporcionar el estado de una operación asincrónica.

Recuperación asincrónica de estadísticas del registro de eventos

WMI admite scripts asincrónicos y semisincrónicos. Al recuperar eventos de los registros de eventos, los scripts asincrónicos suelen recuperar estos datos con mucha mayor rapidez.

En un script asincrónico, se emite una consulta y el control se devuelve inmediatamente al script. La consulta continúa el proceso en un subproceso independiente mientras el script comienza a actuar inmediatamente sobre la información que se devuelve. Los scripts asincrónicos están controlados por eventos: cada vez que se recupera un registro de eventos, se desencadena el evento OnObjectReady. Cuando se haya completado la consulta, se desencadenará el evento OnCompleted y el script podrá continuar, dado que se han devuelto todos los registros disponibles.

En un script semisincrónico, por el contrario, se emite una consulta y, posteriormente, el script pone en cola una gran cantidad de información recuperada antes de actuar sobre él. Para muchos objetos, el procesamiento semisincrónico es adecuado; por ejemplo, al consultar una unidad de disco para sus propiedades, puede haber solo un segundo dividido entre el momento en que se emite la consulta y la hora en que se devuelve y se actúa sobre la información. Esto se debe en gran parte al hecho de que la cantidad de información devuelta es relativamente pequeña.

Sin embargo, al consultar un registro de eventos, el intervalo entre el momento en que se emite la consulta y el tiempo que un script semisincrónico puede terminar de devolver y actuar sobre la información puede tardar horas. Además, el script podría agotar la memoria y producir un error por sí mismo antes de completarse.

En el caso de los registros de eventos con un gran número de registros, la diferencia en el tiempo de procesamiento puede ser considerable. En un equipo de prueba basado en Windows 2000 con 2000 registros en el registro de eventos, una consulta semisincrónica tardó 10 minutos 45 segundos en recuperar todos los eventos y mostrarlos en una ventana de comandos. Una consulta asincrónica tardó un minuto y 54 segundos en realizar la misma operación.

Ejemplos

El siguiente VBScript consulta de forma asincrónica los registros de eventos de todos los registros.

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

Requisitos

Requisito Value
Cliente mínimo compatible
Windows Vista
Servidor mínimo compatible
Windows Server 2008
Encabezado
Wbemdisp.h
IDL
Wbemdisp.idl
Archivo DLL
Wbemdisp.dll
CLSID
CLSID_SWbemSink
CLSID_SWbemSinkEvents
IID
IID_ISWbemSink
IID_ISWbemSinkEvents

Consulte también

Objetos de API de scripting