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 |
|
IDL |
|
DLL |
|
CLSID |
CLSID_SWbemSink CLSID_SWbemSinkEvents |
IID |
IID_ISWbemSink IID_ISWbemSinkEvents |