Condividi tramite


Oggetto SWbemSink

L'oggetto SWbemSink viene implementato dalle applicazioni client per ricevere i risultati delle operazioni asincrone e delle notifiche degli eventi. Per effettuare una chiamata asincrona, è necessario creare un'istanza di un oggetto SWbemSink e passarla come parametro ObjWbemSink . Gli eventi nell'implementazione di SWbemSink vengono attivati quando vengono restituiti lo stato o i risultati o al termine della chiamata. La chiamata a VBScript CreateObject crea questo oggetto.

Membri

L'oggetto SWbemSink ha questi tipi di membri:

Metodi

L'oggetto SWbemSink dispone di questi metodi.

Metodo Descrizione
Annulla Annulla tutte le operazioni asincrone associate al sink.

Commenti

Un callback asincrono consente a un utente non autenticato di fornire dati al sink. Ciò comporta rischi per la sicurezza per gli script e le applicazioni. Per eliminare i rischi, usare la comunicazione semiincrona o la comunicazione sincrona. Per altre informazioni, vedere Chiamata di un metodo.

Eventi

È possibile implementare subroutine da chiamare quando vengono attivati gli eventi. Ad esempio, se si desidera elaborare ogni oggetto restituito da una chiamata di query asincrona, ad esempio SWbemServices.ExecQueryAsync, creare una subroutine usando il sink specificato nella chiamata asincrona, come illustrato nell'esempio seguente.

Sub SinkName_OnObjectReady(objObject, objAsyncContext)

Usare la tabella seguente come riferimento per identificare gli eventi e le descrizioni dei trigger.

Event Descrizione
OnCompleted Attivato al termine di un'operazione asincrona.
OnObjectPut Attivato al termine di un'operazione Put asincrona.
OnObjectReady Attivato quando è disponibile un oggetto fornito da una chiamata asincrona.
OnProgress Attivato per fornire lo stato di un'operazione asincrona.

Recupero asincrono delle statistiche del registro eventi

WMI supporta sia script asincroni che semi sincroni. Quando si recuperano eventi dai registri eventi, gli script asincroni spesso recuperano questi dati molto più velocemente.

In uno script asincrono viene eseguita una query e il controllo viene immediatamente restituito allo script. La query continua a essere elaborata in un thread separato mentre lo script inizia ad agire immediatamente sulle informazioni restituite. Gli script asincroni sono basati su eventi: ogni volta che viene recuperato un record di evento, viene generato l'evento OnObjectReady. Al termine della query, verrà generato l'evento OnCompleted e lo script può continuare in base al fatto che tutti i record disponibili sono stati restituiti.

In uno script semi-sincrono, al contrario, viene eseguita una query e lo script accoda una grande quantità di informazioni recuperate prima di agire su di esso. Per molti oggetti, l'elaborazione semi sincrona è adeguata; Ad esempio, quando si esegue una query su un'unità disco per le relative proprietà, potrebbe essere presente solo una seconda divisione tra l'ora in cui viene eseguita la query e l'ora in cui vengono restituite e eseguite le informazioni. Ciò è dovuto in gran parte al fatto che la quantità di informazioni restituite è relativamente piccola.

Quando si esegue una query su un registro eventi, tuttavia, l'intervallo tra l'esecuzione della query e il tempo in cui uno script semi-sincrono può completare la restituzione e l'azione sulle informazioni può richiedere ore. Oltre a ciò, lo script potrebbe esaurire la memoria e non riuscire autonomamente prima di completare.

Per i registri eventi con un numero elevato di record, la differenza nel tempo di elaborazione può essere notevole. In un computer di test basato su Windows 2000 con 2.000 record nel registro eventi, una query semi sincrona che ha recuperato tutti gli eventi e li ha visualizzati in una finestra di comando ha richiesto 10 minuti 45 secondi. Una query asincrona che ha eseguito la stessa operazione ha richiesto un minuto 54 secondi.

Esempio

Il codice VBScript seguente esegue una query asincrona sui registri eventi per tutti i record.

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

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Intestazione
Wbemdisp.h
IDL
Wbemdisp.idl
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemSink
CLSID_SWbemSinkEvents
IID
IID_ISWbemSink
IID_ISWbemSinkEvents

Vedi anche

Scripting di oggetti API