Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel ini hanya berlaku untuk platform Windows.
Untuk membaca posting blog Scripting Guy 3 Juni 2014 asli, lihat Menggunakan FilterHashTable untuk Memfilter Log Peristiwa dengan PowerShell.
Artikel ini adalah kutipan posting blog asli dan menjelaskan cara menggunakan Get-WinEvent
parameter FilterHashtable cmdlet untuk memfilter log peristiwa. Cmdlet PowerShell Get-WinEvent
adalah metode yang ampuh untuk memfilter peristiwa Windows dan log diagnostik. Performa meningkat saat Get-WinEvent
kueri menggunakan parameter FilterHashtable .
Saat Anda bekerja dengan log peristiwa besar, tidak efisien untuk mengirim objek ke bawah alur ke Where-Object
perintah. Sebelum PowerShell 6, Get-EventLog
cmdlet adalah opsi lain untuk mendapatkan data log. Misalnya, perintah berikut tidak efisien untuk memfilter log Microsoft-Windows-Defrag :
Get-EventLog -LogName Application | Where-Object Source -Match defrag
Get-WinEvent -LogName Application | Where-Object { $_.ProviderName -match 'defrag' }
Perintah berikut menggunakan tabel hash yang meningkatkan performa:
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='*defrag'
}
Postingan blog tentang enumerasi
Artikel ini menyajikan informasi tentang cara menggunakan nilai enumerasi dalam tabel hash. Untuk informasi selengkapnya tentang enumerasi, baca posting blog Scripting Guy ini. Untuk membuat fungsi yang mengembalikan nilai enumerasi, lihat Enumerasi dan Nilai. Untuk informasi selengkapnya, lihat seri posting blog Scripting Guy tentang enumerasi.
Pasangan kunci dan nilai dalam tabel hash
Untuk membangun kueri yang efisien, gunakan Get-WinEvent
cmdlet dengan parameter FilterHashtable .
FilterHashtable menerima tabel hash sebagai filter untuk mendapatkan informasi tertentu dari log peristiwa Windows. Tabel hash menggunakan pasangan kunci-nilai . Untuk informasi selengkapnya tentang tabel hash, lihat about_Hash_Tables.
Jika pasangan kunci-nilai berada di baris yang sama, pasangan tersebut harus dipisahkan oleh titik koma. Jika setiap pasangan kunci-nilai berada di baris terpisah, titik koma tidak diperlukan. Misalnya, artikel ini menempatkan pasangan kunci-nilai pada baris terpisah dan tidak menggunakan titik koma.
Sampel ini menggunakan beberapa pasangan nilai kunci parameter FilterHashtable. Kueri yang telah selesai mencakup LogName, ProviderName, Kata Kunci, Id, dan Tingkat.
Pasangan kunci-nilai yang diterima ditampilkan dalam tabel berikut dan disertakan dalam dokumentasi untuk parameter Get-WinEventFilterHashtable .
Tabel berikut ini menampilkan nama kunci, jenis data, dan apakah karakter wildcard diterima nilai data.
Nama kunci | Jenis nilai data | Menerima karakter pengganti? |
---|---|---|
LogName | <String[]> |
Ya |
ProviderName | <String[]> |
Ya |
Jalur | <String[]> |
Tidak. |
Kata kunci | <Long[]> |
Tidak. |
Identifikasi | <Int32[]> |
Tidak. |
Tingkat | <Int32[]> |
Tidak. |
Waktu Mulai | <DateTime> |
Tidak. |
Waktu Selesai | <DateTime> |
Tidak. |
UserID | <SID> |
Tidak. |
Data Informasi | <String[]> |
Tidak. |
<named-data> |
<String[]> |
Tidak. |
Kunci <named-data>
mewakili bidang data peristiwa bernama. Misalnya, acara Perflib 1008 dapat berisi data peristiwa berikut:
<EventData>
<Data Name="Service">BITS</Data>
<Data Name="Library">C:\Windows\System32\bitsperf.dll</Data>
<Data Name="Win32Error">2</Data>
</EventData>
Anda bisa mengkueri peristiwa ini menggunakan perintah berikut:
Get-WinEvent -FilterHashtable @{LogName='Application'; 'Service'='Bits'}
Nota
Kemampuan untuk mengkueri <named-data>
ditambahkan di PowerShell 6.
Membangun kueri dengan tabel hash
Untuk memverifikasi hasil dan memecahkan masalah, ini membantu membangun tabel hash satu pasangan kunci-nilai pada satu waktu. Kueri mendapatkan data dari log Aplikasi . Tabel hash setara dengan Get-WinEvent -LogName Application
.
Untuk memulai, buat Get-WinEvent
kueri. Gunakan pasangan kunci-nilai parameter FilterHashtable dengan kunci, LogName, dan nilai, Aplikasi.
Get-WinEvent -FilterHashtable @{
LogName='Application'
}
Lanjutkan untuk membangun tabel hash dengan kunci ProviderName . Biasanya, ProviderName adalah nama yang muncul di bidang Sumber di Penampil Peristiwa Windows. Misalnya, .NET Runtime
dalam cuplikan layar berikut:
Gambar sumber Windows Event Viewer
Perbarui tabel hash dan sertakan pasangan kunci-nilai dengan kunci, ProviderName, dan nilai , .NET Runtime
.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Nota
Untuk beberapa penyedia peristiwa, ProviderName yang benar dapat diperoleh dengan melihat tab Detail di Properti Peristiwa. Misalnya, peristiwa di mana bidang Sumber menunjukkan Defrag
, ProviderName yang benar adalah Microsoft-Windows-Defrag
.
Jika kueri Anda perlu mendapatkan data dari log peristiwa yang diarsipkan, gunakan kunci Jalur . Nilai Jalur menentukan jalur lengkap ke file log. Untuk informasi selengkapnya, lihat posting blog Scripting Guy , Gunakan PowerShell untuk Mengurai Log Peristiwa Tersimpan untuk Kesalahan.
Menggunakan nilai enumerasi dalam tabel hash
Kata kunci adalah kunci berikutnya dalam tabel hash. Jenis data Kata Kunci adalah array dari [long]
jenis nilai yang menyimpan angka besar. Gunakan perintah berikut untuk menemukan nilai [long]
maksimum :
[long]::MaxValue
9223372036854775807
Untuk kunci Kata Kunci , PowerShell menggunakan angka, bukan string seperti Keamanan. Penampil Peristiwa Windows menampilkan Kata Kunci sebagai string, tetapi nilainya dijumlahkan. Dalam tabel hash, jika Anda menggunakan kunci Kata Kunci dengan nilai string, pesan kesalahan akan ditampilkan.
Buka Penampil Peristiwa Windows dan dari panel Tindakan , klik Filter log saat ini. Menu drop-down Kata Kunci menampilkan kata kunci yang tersedia, seperti yang ditunjukkan pada cuplikan layar berikut:
Gambar kata kunci Windows Event Viewer
Gunakan perintah berikut untuk menampilkan StandardEventKeywords
nama properti.
[System.Diagnostics.Eventing.Reader.StandardEventKeywords] |
Get-Member -Static -MemberType Property
TypeName: System.Diagnostics.Eventing.Reader.StandardEventKeywords
Name MemberType Definition
—- ———- ———-
AuditFailure Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
AuditSuccess Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
CorrelationHint Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
CorrelationHint2 Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
EventLogClassic Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
None Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
ResponseTime Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
Sqm Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
WdiContext Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
WdiDiagnostic Property static System.Diagnostics.Eventing.Reader.StandardEventKey…
Nilai enumerasi didokumenkan dalam .NET Framework. Untuk informasi selengkapnya, lihat Enumerasi StandardEventKeywords.
Nama Kata Kunci dan nilai yang dijumlahkan adalah sebagai berikut:
Nama | Nilai |
---|---|
Kegagalan Audit | 4503599627370496 |
Keberhasilan Audit | 9007199254740992 |
PetunjukKorelasi2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
Sqm | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
ResponseTime | 281474976710656 |
Tidak ada | 0 |
Perbarui tabel hash dan sertakan pasangan kunci-nilai dengan kunci, Kata Kunci, dan nilai enumerasi EventLogClassic , 36028797018963968.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
}
Kata kunci nilai properti statis (opsional)
Kunci Kata Kunci dijumlahkan, tetapi Anda bisa menggunakan nama properti statis dalam kueri tabel hash. Daripada menggunakan string yang dikembalikan, nama properti harus dikonversi ke nilai dengan properti value__ .
Misalnya, skrip berikut menggunakan properti value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventKeywords]::EventLogClassic
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=$C.value__
}
Pemfilteran menurut Id Peristiwa
Untuk mendapatkan data yang lebih spesifik, hasil kueri difilter menurut Id Peristiwa. Id Peristiwa direferensikan dalam tabel hash sebagai Id kunci dan nilainya adalah Id Peristiwa tertentu. Penampil Peristiwa Windows menampilkan Id Peristiwa. Contoh ini menggunakan Id Peristiwa 1023.
Perbarui tabel hash dan sertakan pasangan kunci-nilai dengan kunci, Id , dan nilai, 1023.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
}
Pemfilteran menurut Tingkat
Untuk lebih menyempurnakan hasil dan hanya menyertakan peristiwa yang merupakan kesalahan, gunakan kunci Tingkat . Penampil Peristiwa Windows menampilkan nilai Tingkat sebagai string, tetapi nilai tersebut dijumlahkan. Dalam tabel hash, jika Anda menggunakan kunci Tingkat dengan nilai string, pesan kesalahan akan ditampilkan.
Tingkat memiliki nilai seperti Kesalahan, Peringatan, atau Informasi. Gunakan perintah berikut untuk menampilkan nama properti StandardEventLevel
.
[System.Diagnostics.Eventing.Reader.StandardEventLevel] |
Get-Member -Static -MemberType Property
TypeName: System.Diagnostics.Eventing.Reader.StandardEventLevel
Name MemberType Definition
---- ---------- ----------
Critical Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Critical {get;}
Error Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Error {get;}
Informational Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Informational {get;}
LogAlways Property static System.Diagnostics.Eventing.Reader.StandardEventLevel LogAlways {get;}
Verbose Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Verbose {get;}
Warning Property static System.Diagnostics.Eventing.Reader.StandardEventLevel Warning {get;}
Nilai enumerasi didokumenkan dalam .NET Framework. Untuk informasi selengkapnya, lihat StandardEventLevel Enumeration.
Nama kunci Tingkat dan nilai yang dijumlahkan adalah sebagai berikut:
Nama | Nilai |
---|---|
Verbositas | 5 |
Bersifat Informatif | 4 |
Peringatan | 3 |
Kesalahan | 2 |
Penting | 1 |
LogAlways | 0 |
Tabel hash untuk kueri yang telah selesai mencakup kunci, Tingkat, dan nilai, 2.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=2
}
Properti statik "Level" dalam enumerasi (opsional)
Kunci Tingkat dijumlahkan, tetapi Anda dapat menggunakan nama properti statis dalam kueri tabel hash. Daripada menggunakan string yang dikembalikan, nama properti harus dikonversi ke nilai dengan properti value__ .
Misalnya, skrip berikut menggunakan properti value__ .
$C = [System.Diagnostics.Eventing.Reader.StandardEventLevel]::Informational
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=$C.value__
}