Menjalankan Skrip Berdasarkan Peristiwa

Konsumen standar yang diimplementasikan oleh kelas ActiveScriptEventConsumer memungkinkan komputer menjalankan skrip dan mengambil tindakan ketika peristiwa penting terjadi untuk memastikan bahwa komputer dapat mendeteksi dan menyelesaikan masalah secara otomatis.

Konsumen ini dimuat secara default di namespace layanan root\subscription .

Anda dapat mengonfigurasi performa semua instans ActiveScriptEventConsumer pada sistem dengan mengatur nilai properti Timeout atau MaximumScripts dalam satu instansScriptingStandardConsumerSetting.

Prosedur dasar untuk menggunakan konsumen standar selalu sama, dan terletak di Pemantauan dan Merespons Peristiwa dengan Konsumen Standar. Prosedur berikut yang ditambahkan ke prosedur dasar, khusus untuk kelas ActiveScriptEventConsumer , dan menjelaskan cara membuat konsumen peristiwa yang menjalankan skrip.

Perhatian

Kelas ActiveScriptEventConsumer memiliki batasan keamanan khusus. Konsumen standar ini harus dikonfigurasi oleh anggota lokal grup Administrator di komputer lokal. Jika Anda menggunakan akun domain untuk membuat langganan, akun LocalSystem harus memiliki izin yang diperlukan pada domain untuk memverifikasi bahwa pembuat adalah anggota grup Administrator lokal.

 

Prosedur berikut menjelaskan cara membuat konsumen peristiwa yang menjalankan skrip.

Untuk membuat konsumen peristiwa yang menjalankan skrip

  1. Tulis skrip untuk dijalankan saat peristiwa berlangsung.

    Anda dapat menulis skrip dalam bahasa apa pun, tetapi pastikan bahwa mesin pembuatan skrip untuk bahasa yang Anda pilih diinstal pada komputer Anda. Skrip tidak harus menggunakan objek pembuatan skrip WMI.

    Hanya administrator yang dapat menyiapkan konsumen skrip, dan skrip berjalan di bawah kredensial LocalSystem, yang memberikan kemampuan luas kepada konsumen kecuali untuk akses jaringan. Namun, skrip tidak memiliki akses ke data masuk pengguna tertentu, misalnya, variabel lingkungan dan berbagi jaringan.

  2. Dalam file Managed Object Format (MOF), buat instans ActiveScriptEventConsumer untuk menerima peristiwa yang Anda minta dalam kueri.

    Anda dapat meletakkan teks skrip di ScriptText, atau Anda dapat menentukan jalur dan nama file skrip di ScriptFileName. Untuk informasi selengkapnya, lihat Mendesain Kelas Managed Object Format (MOF).

  3. Buat instans __EventFilter, beri nama, lalu buat kueri untuk menentukan jenis peristiwa, yang memicu eksekusi skrip.

    Untuk informasi selengkapnya lihat, Mengkueri dengan WQL.

  4. Buat instans __FilterToConsumerBinding untuk mengaitkan filter dengan instans ActiveScriptEventConsumer.

  5. Kompilasi file MOF dengan menggunakan Mofcomp.exe.

Contoh di bagian berikut menunjukkan dua cara untuk mengimplementasikan skrip berbasis peristiwa. Contoh pertama menggunakan skrip yang ditentukan dalam file eksternal, dan contoh kedua menggunakan skrip yang dibangun ke dalam kode MOF. Contohnya ada dalam kode MOF, tetapi Anda dapat membuat instans secara terprogram dengan menggunakan Scripting API untuk WMI atau COM API untuk WMI.

Contoh Menggunakan Skrip Eksternal

Prosedur berikut menjelaskan cara menggunakan contoh skrip eksternal.

Untuk menggunakan contoh skrip eksternal

  1. Buat file bernama c:\Asec.vbs, lalu salin skrip dalam contoh ini ke dalamnya.

  2. Salin daftar MOF ke dalam file teks dan simpan dengan ekstensi .mof.

  3. Di jendela prompt perintah, kompilasi file MOF dengan menggunakan perintah berikut.

    Mofcompfilename**.mof**

  4. Jalankan Kalkulator, yang membuat proses calc.exe. Tunggu selama lebih dari lima detik, tutup jendela Kalkulator, lalu lihat di C:\ direktori untuk file bernama ASEC.log.

    Teks berikut mirip dengan teks yang akan dimuat dalam file ASEC.log.

    Time: 12/31/2002 2:56:33 PM; Entry made by: ASEC
    Application closed. UserModeTime:  1562500; 
    KernelModeTime: 3125000 [hundreds of nanoseconds]
    

Contoh kode VBScript berikut menunjukkan skrip yang dipanggil saat peristiwa diterima oleh konsumen permanen. Objek TargetEvent adalah instans __InstanceDeletionEvent sehingga memiliki properti bernama TargetInstance, yang merupakan instans Win32_Process yang digunakan untuk mengaktifkan peristiwa. Kelas Win32_Process memiliki properti UserModeTime dan KernelModeTime yang dimasukkan ke dalam file log yang dibuat oleh skrip.

' asec.vbs script
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.OpenTextFile("C:\ASEC.log", 8, true)
objFile.WriteLine "Time: " & Now & "; Entry made by: ASEC"

objFile.WriteLine "Application closed. UserModeTime:  " & _
    TargetEvent.TargetInstance.UserModeTime & _
    "; KernelModeTime: " & _
    TargetEvent.TargetInstance.KernelModeTime & _
    " [hundreds of nanoseconds]"
objFile.Close

Contoh kode MOF berikut memanggil skrip saat peristiwa diterima. Ini membuat filter, konsumen, dan pengikatan di antara mereka di namespace root\subscription .

#pragma namespace ("\\\\.\\root\\subscription")

instance of ActiveScriptEventConsumer as $Cons
{
    Name = "ASEC";
    ScriptingEngine = "VBScript";
    ScriptFileName = "c:\\asec2.vbs";
};

instance of __EventFilter as $Filt
{
    Name = "EF";
    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
        "WHERE TargetInstance ISA \"Win32_Process\" "
        "AND TargetInstance.Name = \"calc.exe\"";
    QueryLanguage = "WQL";
    EventNamespace = "root\\cimv2";
};

instance of __FilterToConsumerBinding
{
    Filter = $Filt;
    Consumer = $Cons;
};

Contoh Menggunakan Skrip Sebaris

Prosedur berikut menjelaskan cara menggunakan contoh skrip sebaris.

Untuk menggunakan contoh skrip sebaris

  1. Salin daftar MOF di bagian ini ke dalam file teks, dan simpan dengan ekstensi .mof.

  2. Di jendela prompt perintah, kompilasi file MOF dengan menggunakan perintah berikut.

    Mofcompfilename**.mof**

Contoh kode MOF berikut membuat filter, konsumen, dan pengikatan di antara mereka dan juga berisi skrip sebaris.

#pragma namespace ("\\\\.\\root\\subscription")

instance of ActiveScriptEventConsumer as $Cons
{
    Name = "ASEC";
    ScriptingEngine = "VBScript";
    
    ScriptText =
        "Dim objFS, objFile\n"
        "Set objFS = CreateObject(\"Scripting.FileSystemObject\")\n"
        "Set objFile = objFS.OpenTextFile(\"C:\\ASEC.log\","
        " 8, true)\nobjFile.WriteLine \"Time: \" & Now & \";"
        " Entry made by: ASEC\"\nobjFile.WriteLine"
        " \"Application closed. UserModeTime:  \" & "
        "TargetEvent.TargetInstance.UserModeTime &_\n"
        "\"; KernelModeTime: \" & "
        "TargetEvent.TargetInstance.KernelModeTime "
        "& \" [hundreds of nanoseconds]\"\n"
        "objFile.Close\n";
};

instance of __EventFilter as $Filt
{
    Name = "EF";
    Query = "SELECT * FROM __InstanceDeletionEvent WITHIN 5 "
        "WHERE TargetInstance ISA \"Win32_Process\" "
        "AND TargetInstance.Name = \"calc.exe\"";
    QueryLanguage = "WQL";
    EventNamespace = "root\\cimv2";
};

instance of __FilterToConsumerBinding
{
    Filter = $Filt;
    Consumer = $Cons;
};

Memantau dan Merespons Peristiwa dengan Konsumen Standar