FilterHashtable ile Get-WinEvent sorguları oluşturma
Bu örnek yalnızca Windows platformları için geçerlidir.
Özgün 3 Haziran 2014 Betik Oluşturma Elemanı blog gönderisini okumak için bkz . Olay Günlüğünü PowerShell ile Filtrelemek için FilterHashTable Kullanma.
Bu makale, özgün blog gönderisinin bir alıntısıdır ve olay günlüklerini filtrelemek için cmdlet'in FilterHashtable parametresinin nasıl kullanılacağını Get-WinEvent
açıklar. PowerShell'in cmdlet'i Get-WinEvent
, Windows olay ve tanılama günlüklerini filtrelemek için güçlü bir yöntemdir. Sorgu Get-WinEvent
FilterHashtable parametresini kullandığında performans artar.
Büyük olay günlükleriyle çalışırken, nesneleri işlem hattından bir Where-Object
komuta göndermek verimli değildir. PowerShell 6'dan önce, Get-EventLog
cmdlet günlük verilerini almak için başka bir seçenekti. Örneğin, aşağıdaki komutlar Microsoft-Windows-Defrag günlüklerini filtrelemek için verimsizdir:
Get-EventLog -LogName Application | Where-Object Source -Match defrag
Get-WinEvent -LogName Application | Where-Object { $_.ProviderName -Match 'defrag' }
Aşağıdaki komut, performansı geliştiren bir karma tablo kullanır:
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='*defrag'
}
Numaralandırma hakkında blog gönderileri
Bu makalede, bir karma tabloda numaralandırılmış değerlerin nasıl kullanılacağı hakkında bilgi srilmektedir. Numaralandırma hakkında daha fazla bilgi için bu Scripting Guy blog gönderilerini okuyun. Numaralandırılmış değerleri döndüren bir işlev oluşturmak için bkz . Numaralandırmalar ve Değerler. Daha fazla bilgi için numaralandırma hakkında blog gönderileri betiği oluşturma guy serisine bakın.
Karma tablo anahtar-değer çiftleri
Verimli sorgular oluşturmak için FilterHashtable parametresiyle cmdlet'ini kullanınGet-WinEvent
.
FilterHashtable , Windows olay günlüklerinden belirli bilgileri almak için bir karma tabloyu filtre olarak kabul eder. Karma tablo anahtar-değer çiftlerini kullanır. Karma tabloları hakkında daha fazla bilgi için bkz. about_Hash_Tables.
Anahtar-değer çiftleri aynı satırdaysa, bunlar noktalı virgülle ayrılmalıdır. Her anahtar-değer çifti ayrı bir satırdaysa noktalı virgül gerekmez. Örneğin, bu makale anahtar-değer çiftlerini ayrı satırlara yerleştirir ve noktalı virgül kullanmaz.
Bu örnek FilterHashtable parametresinin anahtar-değer çiftlerinden birkaçını kullanır. Tamamlanan sorgu LogName, ProviderName, Anahtar Sözcükler, Kimlik ve Düzey bilgilerini içerir.
Kabul edilen anahtar-değer çiftleri aşağıdaki tabloda gösterilmiştir ve Get-WinEvent FilterHashtable parametresinin belgelerinde yer alır.
Aşağıdaki tabloda anahtar adları, veri türleri ve bir veri değeri için joker karakterlerin kabul edilip edilmediği gösterilir.
Anahtar adı | Değer veri türü | Joker karakterler kabul edilsin mi? |
---|---|---|
LogName | <String[]> |
Yes |
ProviderName | <String[]> |
Yes |
Yol | <String[]> |
Hayır |
Anahtar sözcükler | <Long[]> |
Hayır |
Kimlik | <Int32[]> |
Hayır |
Level | <Int32[]> |
Hayır |
StartTime | <DateTime> |
Hayır |
EndTime | <DateTime> |
Hayır |
UserID | <SID> |
Hayır |
Veri | <String[]> |
Hayır |
<named-data> |
<String[]> |
Hayır |
anahtar, <named-data>
adlandırılmış bir olay veri alanını temsil eder. Örneğin, Perflib olayı 1008 aşağıdaki olay verilerini içerebilir:
<EventData>
<Data Name="Service">BITS</Data>
<Data Name="Library">C:\Windows\System32\bitsperf.dll</Data>
<Data Name="Win32Error">2</Data>
</EventData>
Aşağıdaki komutu kullanarak bu olayları sorgulayabilirsiniz:
Get-WinEvent -FilterHashtable @{LogName='Application'; 'Service'='Bits'}
Not
sorgulama <named-data>
özelliği PowerShell 6'ya eklendi.
Karma tabloyla sorgu oluşturma
Sonuçları doğrulamak ve sorunları gidermek için karma tablosunun bir kerede bir anahtar-değer çifti oluşturulmasına yardımcı olur. Sorgu, Uygulama günlüğünden veri alır. Karma tablo ile Get-WinEvent -LogName Application
eşdeğerdir.
Başlamak için sorguyu Get-WinEvent
oluşturun. FilterHashtable parametresinin anahtar-değer çiftini key, LogName ve değeri olan Application ile kullanın.
Get-WinEvent -FilterHashtable @{
LogName='Application'
}
ProviderName anahtarıyla karma tablo oluşturmaya devam edin. ProviderName genellikle Windows Olay Görüntüleyicisi Kaynak alanında görünen addır. Örneğin, .NET Runtime
aşağıdaki ekran görüntüsünde:
Windows Olay Görüntüleyicisi kaynaklarının görüntüsü
Karma tablosunu güncelleştirin ve anahtar-değer çiftini key, ProviderName ve değeriyle .NET Runtime
ekleyin.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
}
Not
Bazı olay sağlayıcıları için, Olay Özellikleri'ndeki Ayrıntılar sekmesine bakılarak doğru ProviderName elde edilebilir. Örneğin, Kaynak alanının gösterdiği Defrag
olaylar doğru ProviderName şeklindedirMicrosoft-Windows-Defrag
.
Sorgunuzun arşivlenmiş olay günlüklerinden veri alması gerekiyorsa Yol anahtarını kullanın. Yol değeri, günlük dosyasının tam yolunu belirtir. Daha fazla bilgi için, Kaydedilmiş Olay Günlüklerini Hatalar için Ayrıştırmak için PowerShell'i Kullanma makalesine bakın.
Karma tabloda numaralandırılmış değerleri kullanma
Anahtar sözcükler karma tablosundaki bir sonraki anahtardır. Anahtar Sözcükler veri türü, büyük bir sayı içeren değer türünün dizisidir[long]
. en yüksek değerini [long]
bulmak için aşağıdaki komutu kullanın:
[long]::MaxValue
9223372036854775807
Anahtar Sözcükler anahtarı için PowerShell, Güvenlik gibi bir dizeyi değil, bir sayıyı kullanır. Windows Olay Görüntüleyicisi Anahtar Sözcükleri dize olarak görüntüler, ancak bunlar numaralandırılmış değerlerdir. Karma tabloda Anahtar Sözcükler anahtarını bir dize değeriyle kullanırsanız bir hata iletisi görüntülenir.
Windows Olay Görüntüleyicisi açın ve Eylemler bölmesinde Geçerli günlüğü filtrele'ye tıklayın. Anahtar Sözcükler açılan menüsünde, aşağıdaki ekran görüntüsünde gösterildiği gibi kullanılabilir anahtar sözcükler görüntülenir:
Windows Olay Görüntüleyicisi anahtar sözcüklerinin görüntüsü
Özellik adlarını görüntülemek StandardEventKeywords
için aşağıdaki komutu kullanın.
[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…
Numaralandırılmış değerler .NET Framework'te belgelenmiştir. Daha fazla bilgi için bkz . StandardEventKeywords Numaralandırması.
Anahtar sözcük adları ve numaralandırılmış değerler aşağıdaki gibidir:
Veri Akışı Adı | Değer |
---|---|
AuditFailure | 4503599627370496 |
AuditSuccess | 9007199254740992 |
CorrelationHint2 | 18014398509481984 |
EventLogClassic | 36028797018963968 |
Sqm | 2251799813685248 |
WdiDiagnostic | 1125899906842624 |
WdiContext | 562949953421312 |
ResponseTime | 281474976710656 |
Hiçbiri | 0 |
Karma tabloyu güncelleştirin ve anahtar-değer çiftini anahtar, Anahtar Sözcükler ve EventLogClassic numaralandırma değeriyle 36028797018963968 ekleyin.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
}
Anahtar sözcükler statik özellik değeri (isteğe bağlı)
Anahtar Sözcükler anahtarı numaralandırılır, ancak karma tablo sorgusunda statik özellik adı kullanabilirsiniz. Döndürülen dizeyi kullanmak yerine, özellik adı Value__ özelliğine sahip bir değere dönüştürülmelidir.
Örneğin, aşağıdaki betik Value__ özelliğini kullanır.
$C = [System.Diagnostics.Eventing.Reader.StandardEventKeywords]::EventLogClassic
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=$C.Value__
}
Olay Kimliğine Göre Filtreleme
Daha belirli veriler almak için sorgunun sonuçları Olay Kimliğine göre filtrelenir. Karma tabloda Olay Kimliğine anahtar kimliği olarak başvurulur ve değer belirli bir Olay Kimliği'dir. Windows Olay Görüntüleyicisi Olay Kimliği'ni görüntüler. Bu örnekte Olay Kimliği 1023 kullanılır.
Karma tabloyu güncelleştirin ve anahtar-değer çiftini anahtar, kimlik ve 1023 değeriyle ekleyin.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
}
Düzeye Göre Filtreleme
Sonuçları daha da geliştirmek ve yalnızca hata olan olayları dahil etmek için Düzey anahtarını kullanın. Windows Olay Görüntüleyicisi Düzeyi dize değerleri olarak görüntüler, ancak bunlar numaralandırılmış değerlerdir. Karma tabloda Düzey anahtarını bir dize değeriyle kullanırsanız bir hata iletisi görüntülenir.
Düzey Hata, Uyarı veya Bilgilendirme gibi değerlere sahiptir. Özellik adlarını görüntülemek StandardEventLevel
için aşağıdaki komutu kullanın.
[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;}
Numaralandırılmış değerler .NET Framework'te belgelenmiştir. Daha fazla bilgi için bkz . StandardEventLevel Sabit Listesi.
Düzey anahtarının adları ve numaralandırılmış değerleri aşağıdaki gibidir:
Veri Akışı Adı | Değer |
---|---|
Ayrıntılı | 5 |
Bilgi | 4 |
Uyarı | 3 |
Hata | 2 |
Kritik | 1 |
LogAlways | 0 |
Tamamlanan sorgunun karma tablosu anahtar, Düzey ve 2 değerini içerir.
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=2
}
Numaralandırmada düzey statik özelliği (isteğe bağlı)
Düzey anahtarı numaralandırılır, ancak karma tablo sorgusunda statik özellik adı kullanabilirsiniz. Döndürülen dizeyi kullanmak yerine, özellik adı Value__ özelliğine sahip bir değere dönüştürülmelidir.
Örneğin, aşağıdaki betik Value__ özelliğini kullanır.
$C = [System.Diagnostics.Eventing.Reader.StandardEventLevel]::Informational
Get-WinEvent -FilterHashtable @{
LogName='Application'
ProviderName='.NET Runtime'
Keywords=36028797018963968
ID=1023
Level=$C.Value__
}
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin