Membuat kueri Get-WinEvent dengan FilterHashtable
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'
}
Posting 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-nilai 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 kartubebas diterima untuk nilai data.
Nama kunci | Jenis data nilai | Menerima karakter kartubebas? |
---|---|---|
LogName | <String[]> |
Ya |
ProviderName | <String[]> |
Ya |
Jalur | <String[]> |
No |
Kata Kunci | <Long[]> |
No |
ID | <Int32[]> |
No |
Tingkat | <Int32[]> |
No |
StartTime | <DateTime> |
No |
EndTime | <DateTime> |
No |
ID Pengguna | <SID> |
No |
Data | <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'}
Catatan
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 Pemantau Peristiwa Windows. Misalnya, .NET Runtime
dalam cuplikan layar berikut:
Gambar sumber Windows Pemantau Peristiwa
Perbarui tabel hash dan sertakan pasangan kunci-nilai dengan kunci, ProviderName, dan nilai , .NET Runtime
.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Catatan
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. Windows Pemantau Peristiwa 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 Pemantau 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 Pemantau Peristiwa
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 |
---|---|
AuditFailure | 4503599627370496 |
AuditSuccess | 9007199254740992 |
KorelasiHint2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
M2 | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
ResponseTime | 281474976710656 |
Tidak | 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 menjadi 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.Windows Pemantau Peristiwa 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 . Windows Pemantau Peristiwa 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 StandardEventLevel
nama properti.
[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 |
---|---|
Verbose | 5 |
Informasi | 4 |
Peringatan | 3 |
Kesalahan | 2 |
Kritis | 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 statis tingkat 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 menjadi 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__
}
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk