Objek SWbemSink
Objek SWbemSink diimplementasikan oleh aplikasi klien untuk menerima hasil operasi asinkron dan pemberitahuan peristiwa. Untuk melakukan panggilan asinkron, Anda harus membuat instans objek SWbemSink dan meneruskannya sebagai parameter ObjWbemSink . Peristiwa dalam implementasi SWbemSink Anda dipicu saat status atau hasil dikembalikan, atau ketika panggilan selesai. Panggilan CreateObject VBScript membuat objek ini.
Objek SWbemSink memiliki jenis anggota ini:
Objek SWbemSink memiliki metode ini.
Metode | Deskripsi |
---|---|
Batalkan | Membatalkan semua operasi asinkron yang terkait dengan sink ini. |
Panggilan balik asinkron memungkinkan pengguna yang tidak diautentikasi untuk menyediakan data ke sink. Ini menimbulkan risiko keamanan pada skrip dan aplikasi Anda. Untuk menghilangkan risiko, gunakan komunikasi semisinkron atau komunikasi sinkron. Untuk informasi selengkapnya, lihat Memanggil Metode.
Anda dapat menerapkan subroutine untuk dipanggil saat peristiwa dipicu. Misalnya, jika Anda ingin memproses setiap objek yang dikembalikan oleh panggilan kueri asinkron seperti SWbemServices.ExecQueryAsync, buat subroutine menggunakan sink yang ditentukan dalam panggilan asinkron, seperti yang ditunjukkan dalam contoh berikut.
Sub SinkName_OnObjectReady(objObject, objAsyncContext)
Gunakan tabel berikut sebagai referensi untuk mengidentifikasi peristiwa dan deskripsi pemicu.
Kejadian | Deskripsi |
---|---|
OnCompleted | Dipicu ketika operasi asinkron selesai. |
OnObjectPut | Dipicu ketika operasi Put asinkron selesai. |
OnObjectReady | Dipicu saat objek yang disediakan oleh panggilan asinkron tersedia. |
OnProgress | Dipicu untuk memberikan status operasi asinkron. |
Mengambil Statistik Log Peristiwa Secara Asinkron
WMI mendukung skrip asinkron dan semi-sinkron. Saat mengambil peristiwa dari log peristiwa, skrip asinkron sering mengambil data ini jauh lebih cepat.
Dalam skrip asinkron, kueri dikeluarkan dan kontrol segera dikembalikan ke skrip. Kueri terus memproses utas terpisah sementara skrip mulai segera bertindak pada informasi yang dikembalikan. Skrip asinkron didorong peristiwa: setiap kali rekaman peristiwa diambil, peristiwa OnObjectReady diaktifkan. Ketika kueri telah selesai, peristiwa OnCompleted akan diaktifkan, dan skrip dapat dilanjutkan berdasarkan fakta bahwa semua rekaman yang tersedia telah dikembalikan.
Dalam skrip semi-sinkron, sebaliknya, kueri dikeluarkan dan skrip kemudian mengantre sejumlah besar informasi yang diambil sebelum bertindak atasnya. Untuk banyak objek, pemrosesan semi-sinkron memadai; misalnya, saat mengkueri drive disk untuk propertinya, mungkin hanya ada pemisahan detik antara waktu kueri dikeluarkan dan waktu informasi dikembalikan dan ditindaklanjuti. Hal ini disebabkan oleh sebagian besar fakta bahwa jumlah informasi yang dikembalikan relatif kecil.
Namun, saat mengkueri log peristiwa, interval antara waktu kueri dikeluarkan dan waktu skrip semi-sinkron dapat selesai dikembalikan dan bertindak pada informasi dapat memakan waktu berjam-jam. Selain itu, skrip mungkin kehabisan memori dan gagal sendiri sebelum menyelesaikannya.
Untuk log peristiwa dengan sejumlah besar rekaman, perbedaan waktu pemrosesan bisa sangat besar. Pada komputer uji berbasis Windows 2000 dengan 2.000 rekaman di log peristiwa, kueri semi-sinkron yang mengambil semua peristiwa dan menampilkannya di jendela perintah membutuhkan waktu 10 menit 45 detik. Kueri asinkron yang melakukan operasi yang sama membutuhkan waktu satu menit 54 detik.
VBScript berikut ini secara asinkron mengkueri log peristiwa untuk semua rekaman.
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
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows Vista |
Server minimum yang didukung |
Windows Server 2008 |
Header |
|
IDL |
|
DLL |
|
CLSID |
CLSID_SWbemSink CLSID_SWbemSinkEvents |
IID |
IID_ISWbemSink IID_ISWbemSinkEvents |