Bagikan melalui


Memantau Peristiwa

Administrator sistem dapat menggunakan WMI untuk memantau peristiwa di jaringan. Misalnya:

  • Layanan berhenti secara tak terduga.
  • Server menjadi tidak tersedia.
  • Drive disk terisi hingga kapasitas 80%.
  • Kejadian keamanan dilaporkan dalam Log Peristiwa NT.

WMI mendukung deteksi dan pengiriman peristiwa kepada konsumen, karena beberapa penyedia WMI berfungsi sebagai penyedia peristiwa. Untuk informasi selengkapnya, lihat Menerima Acara WMI.

Konsumen peristiwa adalah aplikasi atau skrip yang meminta pemberitahuan peristiwa, lalu melakukan tugas saat peristiwa tertentu terjadi. Anda dapat membuat skrip pemantauan peristiwa atau aplikasi yang memantau sementara saat peristiwa terjadi. WMI juga menyediakan serangkaian penyedia peristiwa permanen yang telah diinstal sebelumnya dan kelas konsumen permanen yang memungkinkan Anda memantau peristiwa secara permanen. Untuk informasi selengkapnya, lihat Memantau dan Merespons Peristiwa dengan Konsumen Standar.

Bagian berikut dibahas dalam topik ini:

Menggunakan Pengguna Peristiwa Sementara

Konsumen peristiwa sementara adalah skrip atau aplikasi yang mengembalikan peristiwa yang cocok dengan kueri atau filter peristiwa. Kueri peristiwa sementara biasanya menggunakan IWbemServices::ExecNotificationQuery dalam aplikasi C++ atau SWbemServices.ExecNotificationQuery dalam skrip dan Visual Basic.

Kueri peristiwa meminta instans kelas peristiwa yang menentukan jenis peristiwa tertentu, seperti Win32_ProcessTrace atau RegistryKeyChangeEvent.

Contoh kode VBScript berikut meminta pemberitahuan saat instans Win32_ProcessTrace dibuat. Instans kelas ini dihasilkan saat proses dimulai atau dihentikan.

Untuk menjalankan skrip, salin ke file bernama event.vbs dan gunakan baris perintah berikut: cscript event.vbs. Anda dapat melihat keluaran dari skrip dengan memulai Notepad.exe atau proses lainnya. Skrip berhenti setelah lima proses dimulai atau dihentikan.

Skrip ini memanggil SWbemServices.ExecNotificationQuery, yang merupakan versisemisinkronmetode. Lihat skrip berikut untuk melihat contoh cara menyiapkan langganan acara sementara yang bersifat asinkron dengan memanggil SWbemServices.ExecNotificationQueryAsync. Untuk informasi selengkapnya, lihat Memanggil Metode. Skrip tersebut memanggil SWbemEventSource.NextEvent untuk memperoleh dan memproses setiap peristiwa saat tiba. Simpan skrip dalam file dengan ekstensi .vbs dan jalankan skrip pada baris perintah menggunakan CScript: file.vbs cscript.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" _
    & strComputer & "\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _
    ("SELECT * FROM Win32_ProcessTrace")

Wscript.Echo "Waiting for events ..."
i = 0
Do Until i=5
    Set objReceivedEvent = objEvents.NextEvent
    'report an event
    Wscript.Echo "Win32_ProcessTrace event occurred" & VBNewLine _
        & "Process Name = " _
            & objReceivedEvent.ProcessName & VBNewLine _
        & "Process ID = " _
            & objReceivedEvent.Processid & VBNewLine _
        & "Session ID = " & objReceivedEvent.SessionID 
i = i+ 1
Loop

Konsumen acara sementara perlu dimulai secara manual dan tidak boleh bertahan selama restart WMI atau restart sistem operasi. Konsumen peristiwa sementara hanya dapat memproses peristiwa saat sedang berjalan.

Prosedur berikut menjelaskan cara membuat konsumen peristiwa sementara.

Untuk membuat konsumen sementara peristiwa

  1. Tentukan bahasa pemrograman mana yang akan digunakan.

    Bahasa pemrograman menentukan API yang akan digunakan.

  2. Mulailah pengkodean aplikasi konsumen acara sementara dengan cara yang sama saat Anda memulai aplikasi WMI.

    Langkah-langkah pertama pengkodan tergantung pada bahasa pemrograman. Biasanya, Anda masuk ke WMI dan menyiapkan pengaturan keamanan. Untuk informasi selengkapnya, lihat Membuat Aplikasi WMI atau Skrip.

  3. Tentukan kueri peristiwa yang ingin Anda gunakan.

    Untuk mendapatkan beberapa jenis data performa, Anda mungkin perlu menggunakan kelas yang disediakan oleh penyedia berperforma tinggi. Untuk informasi selengkapnya, lihat Memantau Data Performa, Menentukan Jenis Peristiwa untuk Diterima, dan Melakukan Kueri dengan WQL.

  4. Putuskan untuk melakukan panggilan asinkron atau panggilan semisinkron, dan pilih metode API.

    Panggilan asinkron memungkinkan Anda menghindari biaya tambahan dari memeriksa data secara berkala. Namun, panggilan semisinkron memberikan performa serupa dengan keamanan yang lebih besar. Untuk informasi selengkapnya, lihat Memanggil Metode.

  5. Lakukan panggilan metode asinkron atau semisinkron dan sertakan kueri peristiwa sebagai parameter strQuery.

    Untuk aplikasi C++, panggil metode berikut:

    Untuk skrip, panggil metode berikut:

  6. Tulis kode untuk memproses objek peristiwa yang dikembalikan.

    Untuk kueri peristiwa asinkron, letakkan kode dalam berbagai metode atau peristiwa sink objek. Untuk kueri peristiwa semisinkron, setiap objek dikembalikan saat WMI mendapatkannya, sehingga kode harus berada di perulangan yang menangani setiap objek.

Contoh kode skrip berikut adalah versi asinkron dari skrip Win32_ProcessTrace. Karena operasi asinkron segera kembali, kotak dialog membuat skrip tetap aktif saat menunggu peristiwa.

Daripada memanggil SWbemEventSource.NextEvent untuk menerima setiap peristiwa, skrip memiliki penanganan aktivitas untuk peristiwa SWbemSink OnObjectReady.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & _
    strComputer & "\root\CIMV2") 
Set EventSink = WScript.CreateObject( _
    "WbemScripting.SWbemSink","SINK_")

objWMIservice.ExecNotificationQueryAsync EventSink, _
    "SELECT * FROM Win32_ProcessTrace WITHIN 10"
WScript.Echo "Waiting for events..."

i = 0
While (True)
    Wscript.Sleep(1000)
Wend

Sub SINK_OnObjectReady(objObject, objAsyncContext)
    Wscript.Echo "Win32_ProcessTrace event has occurred."
    i = i+1
    If i = 3 Then WScript.Quit 0 
End Sub

Nota

Panggilan balik asinkron, seperti panggilan balik yang ditangani oleh subroutine SINK_OnObjectReady, memungkinkan pengguna yang tidak terautentikasi untuk menyediakan data ke saluran. Untuk keamanan yang lebih baik, gunakan komunikasi semisinkron atau komunikasi sinkron. Untuk informasi selengkapnya, lihat topik berikut ini:

 

Menggunakan Konsumen Peristiwa Permanen

Konsumen peristiwa permanen berjalan sampai pendaftarannya dibatalkan secara eksplisit, dan kemudian akan dimulai ketika WMI atau sistem dinyalakan ulang.

Konsumen peristiwa permanen adalah kombinasi kelas WMI, filter, dan objek COM pada sistem.

Daftar berikut menunjukkan komponen yang diperlukan untuk membuat konsumen acara permanen:

  • Objek COM yang berisi kode yang mengimplementasikan konsumen permanen.
  • Kelas konsumen permanen baru.
  • Contoh kelas konsumen permanen.
  • Filter yang berisi kueri untuk peristiwa.
  • Tautan antara konsumen dan filter.

Untuk informasi selengkapnya, lihat Menerima Peristiwa Setiap Saat.

WMI memasok beberapa konsumen permanen. Kelas konsumen dan objek COM yang berisi kode telah diinstal sebelumnya. Misalnya, Anda dapat membuat dan mengonfigurasi instans kelasActiveScriptEventConsumer untuk menjalankan skrip saat peristiwa terjadi. Untuk informasi selengkapnya, lihat Memantau dan Merespons Peristiwa dengan Konsumen Standar. Untuk contoh penggunaan ActiveScriptEventConsumer, lihat Menjalankan Sebuah Skrip Berdasarkan Suatu Kejadian.

Prosedur berikut menjelaskan cara membuat penerima acara permanen.

Untuk membuat konsumen peristiwa permanen

  1. Daftarkan penyedia acara dengan namespace yang Anda gunakan.

    Beberapa penyedia acara hanya dapat menggunakan namespace tertentu. Misalnya, __InstanceCreationEvent adalah peristiwa intrinsik yang didukung oleh penyedia Win32 dan terdaftar secara default dengan namespace \root\cimv2.

    Nota

    Anda dapat menggunakan properti EventNamespace dari __EventFilter yang digunakan dalam pendaftaran untuk membuat langganan lintas namespace. Untuk informasi selengkapnya, lihat Menerapkan Langganan Peristiwa Permanen Lintas Namespace.

     

  2. Daftarkan konsumen penyedia event dengan namespace tempat kelas event berada.

    WMI menggunakan penyedia konsumen peristiwa untuk menemukan konsumen peristiwa yang permanen. Konsumen peristiwa permanen adalah aplikasi yang dijalankan oleh WMI ketika suatu peristiwa diterima. Untuk mendaftarkan konsumen acara, penyedia membuat instans __EventConsumerProviderRegistration.

  3. Buat instance kelas yang mewakili konsumen peristiwa permanen yang ingin Anda gunakan.

    Kelas event consumer berasal dari kelas __EventConsumer. Atur properti yang diperlukan instance konsumen acara.

  4. Daftarkan konsumen dengan COM menggunakan utilitas regsvr32.

  5. Buat instans kelas filter peristiwa __EventFilter.

    Tetapkan bidang yang diperlukan untuk instans filter acara. Bidang yang diperlukan untuk __EventFilter adalah Nama, QueryLanguage, dan Query. Properti Name dapat berupa nama unik apa pun untuk instans kelas ini. Properti QueryLanguage selalu diatur ke "WQL". Properti Kueri adalah string yang berisi kueri peristiwa. Peristiwa dihasilkan ketika kueri pengguna acara permanen gagal. Sumber peristiwa adalah WinMgmt, ID peristiwa adalah 10, dan jenis peristiwanya adalah Kesalahan.

  6. Buat instans kelas __FilterToConsumerBinding untuk mengaitkan konsumen peristiwa logis dengan filter peristiwa.

    WMI menggunakan hubungan untuk menemukan pemakai peristiwa yang terkait dengan peristiwa yang cocok dengan kriteria yang ditentukan dalam filter peristiwa. WMI menggunakan penyedia konsumen peristiwa untuk menemukan aplikasi konsumen peristiwa tetap untuk dijalankan.