Bagikan melalui


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.

Anggota

Objek SWbemSink memiliki jenis anggota ini:

Metode

Objek SWbemSink memiliki metode ini.

Metode Deskripsi
Batalkan Membatalkan semua operasi asinkron yang terkait dengan sink ini.

Keterangan

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.

Acara

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.

Contoh

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

Persyaratan Nilai
Klien minimum yang didukung
Windows Vista
Server minimum yang didukung
Windows Server 2008
Header
Wbemdisp.h
IDL
Wbemdisp.idl
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemSink
CLSID_SWbemSinkEvents
IID
IID_ISWbemSink
IID_ISWbemSinkEvents

Lihat juga

Membuat Skrip Objek API