Menjalankan skrip PowerShell ketika peristiwa tertentu terjadi

Saya dihadapkan dengan kebutuhan untuk menjalankan skrip PowerShell ketika peristiwa tertentu (Windows Event) terjadi saat mengatur DHCP failover. Namun, saya pikir mungkin ada banyak aplikasi. Mengaduk-aduk jaring dan menemukan sebuah artikel berjudul Pemicu a Powerhell Skrip dari a Windows Acara. (http://blogs.technet.com/b/wincat/archive/2011/08/25/trigger-a-powershell-script-from-a-windows-event.aspx). Saya membawa perhatian Anda pada terjemahan artikel ini ke dalam bahasa Rusia.

Contoh ini menunjukkan cara melakukan dua hal sekaligus. Jalankan skrip PowerShell ketika Windows Event tertentu terjadi, dan JUGA melewatkan parameter Event yang diperlukan untuk menjalankan skrip. Misalnya, kami akan menggunakan acara pengujian yang dihasilkan oleh program Buat acara dari baris perintah.

Latar Belakang: Skrip ini diperlukan untuk menghapus folder publik tertentu ketika peristiwa tertentu terjadi (Windows Event). Acara ini direkam setelah proses penambahan "tanda air" ke file tertentu selesai. Acara yang digunakan dalam contoh ini mengulangi format acara standar.

Langkah-langkah berikut akan ditampilkan:

  • Pembuatan dan perpindahan acara secara manual
  • Menggunakan Konsol Penampil Acara
  • Mengubah tugas yang dijadwalkan untuk meneruskan parameter acara ke skrip
  • Menjalankan dan menjalankan skrip PowerShell
  • Verifikasi Pengaturan

Langkah 1: Buat Rekaman Acara Menggunakan Buat acara

C: \> eventcreate / T INFORMASI / SO SomeApplication / ID 1000 / L APLIKASI / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Langkah 2: Buat tugas baru di konsol log acara melihat menggunakan menu konteks "Lampirkan tugas ke acara ini ("Lampirkan Tugas untuk Ini Acara... ”)

Luncurkan konsol Peraga Peristiwa (eventvwr.msc), temukan di log peristiwa Log Windows -> Aplikasi Acara dibuat pada langkah sebelumnya. Klik kanan padanya dan pilih "Lampirkan Tugas ke Acara Ini ... "

Catatan. Kemungkinan membuat pemicu acara menggunakan menu ini sebelumnya telah dibahas dalam artikel Pemicu Peristiwa Windows..

Buat tugas "Mulai Program" dengan parameter berikut:

Program / skrip (Program / skrip): PowerShell.exe

Argumen (Tambahkan argumen): .\ TriggerScript.ps1 -eventRecordID $ (eventRecordID) -eventChannel $ (eventChannel)

Mulai di (Mulai dalam) (Anda mungkin perlu membuat folder ini atau arahkan ke folder yang ada): c: \ temp

 Langkah 3: Ubah tugas untuk memberikan detail acara (pemicu acara) dan meneruskan parameter ke skrip Powerhell

Di dalam Penjadwal Tugas, unggah tugas yang baru dibuat (sebagai file XML). Klik kanan pada tugas "Application_SomeApplication_1000" di folder "Tugas Penampil Acara", dan pilih "Ekspor ... ".

Menggunakan Notepad atau editor teks lain (diharapkan editor mendukung pengeditan Unicode, seperti Notepad), tambahkan parameter acara yang perlu dikirim. Parameter acara yang disajikan di bawah ini paling sering digunakan untuk mengidentifikasi acara. Perhatikan bahwa seluruh node dan anak-anaknya harus ditambahkan ke cabang EventTrigger.


Acara / Sistem / Saluran
Event / Sistem / EventRecordID
Acara / Sistem / Level

Seperti ini:

Dari baris perintah, jalankan perintah berikut untuk menghapus tugas penjadwal dan membuatnya kembali menggunakan file yang baru saja dimodifikasi (saya tidak tahu cara memodifikasi tugas menggunakan file XML yang dimodifikasi).

C: \> schtasks / delete / TN "Tugas Penampil Acara \ Application_SomeApplication_1000"
C: \> schtasks / create / TN "Tugas Penampil Acara \ Application_SomeApplication_1000" / Aplikasi XML_
SomeApplication_1000.xml

Langkah 4: Ciptaan Powerhell naskah TriggerScript.ps1, yang mana disebut tugas perencana

Catatan. Script yang ditampilkan menerima informasi dasar tentang tugas yang diluncurkannya. Script kemudian polling Windows Event Log untuk detail lainnya tentang acara tersebut. Dalam contoh kami, parameter ditransmisikan melalui XML, tetapi teks lain dapat ditransmisikan, asalkan skrip dapat mem-parsing dengan benar dan menerimanya. By the way, parameter "eventRecordID", yang diteruskan ke skrip, tidak boleh bingung dengan eventID acara. Nilai eventRecordID adalah nomor urut berurutan yang ditetapkan untuk semua acara ketika mereka terdaftar di saluran mereka (Log'e). Selain itu, eventRecordIDs adalah unik untuk saluran tertentu (Log).


# Nama Skrip: TriggerScript.ps1
# Contoh Penggunaan (gunakan ID yang valid yang ditemukan melalui tampilan XML Peraga peristiwa): powershell. \ TriggerScript.ps1 -eventRecordID 1 -eventChannel Application
#
# Buat acara palsu atau pengujian dengan perintah berikut (dari prompt perintah yang ditinggikan):
# eventcreate / T INFORMASI / SO SomeApplication / ID 1000 / L APLIKASI / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"
# Mengumpulkan semua parameter bernama (semua yang lain berakhir dengan $ Args)
param ($ eventRecordID, $ eventChannel)

$ event = get-winevent -LogName $ eventChannel -FilterXPath "* [Sistem [(EventRecordID = $ eventRecordID)]]"
[xml] $ eventParams = $ event.Message
if ($ eventParams.Params.TimeStamp)
[datetime] $ eventTimestamp = $ eventParams.Params.TimeStamp
$ eventFile = $ eventParams.Params.InputFile
$ popupObject = new-object -comobject wscript.shell
$ popupObject.popup ("RecordID:" + $ eventRecordID + ", Saluran:" + $ eventChannel + ", Cap Waktu Acara:" + $ eventTimestamp + ", File:" + $ eventFile)

Catatan: Selain menjalankan skrip, tugas scheduler dapat menampilkan jendela pop-up atau mengirim email. Mengirim pemberitahuan e-mail berguna untuk mengingatkan Anda tentang peristiwa yang jarang terjadi di lingkungan Anda. Tugas serupa juga dapat didistribusikan melalui GPO (Preferensi Kebijakan Grup).

Langkah 5: Verifikasi pengaturan dengan membuat acara baru yang mirip dengan yang dibuat pada Langkah 1

C: \> eventcreate / T INFORMASI / SO SomeApplication / ID 1000 / L APLIKASI / D "2011-08-29T21: 24: 03ZC: \ temp \ Some Test File.txtSuccess"

Anda akan melihat pesan yang muncul seperti ini:

Tidak bekerja? Periksa yang berikut ini:

  • Periksa acara di Penampil Acara. Anda mungkin perlu menyegarkan tampilan melalui menu Refresh atau tombol F5.
  • Jalankan skrip secara manual dengan parameter nyata dan lihat kemungkinan kesalahan (perhatikan komentar dalam skrip, dengan contoh aplikasi). Ketika skrip "tidak ditandatangani," Anda mungkin perlu mengkonfigurasi PowerShell untuk menjalankan ini sebagai tidak ditandatangani (lihat PS> dapatkan bantuan tentang_Exekusi_Policies).
  • Pastikan tugas ada di Penjadwal Tugas di folder "Tugas Penampil Acara" dan lihat riwayat tugas ("Riwayat").