Bir bilgisayarda sistem olay günlüğünde çok sayıda diskle ilgili 51 kimlikli kaydın olduğunu gördüm. Genel bir bakışla olayların birkaç günde yoğunlaştığını farkettim.
Get-WinEvent -computer BILGISAYAR -FilterHashTable @{LogName="System";ProviderName="disk";Id=51} | Measure-Object
ile 30.000+ olay kaydı olduğu saydım, ama bunlar her güne düzgün yayılmamıştı. Tarihe göre gruplayarak bir günlük sayıya ulaşmak istedim ama
Get-WinEvent -computer BILGISAYAR -FilterHashTable @{LogName="System";ProviderName="disk";Id=51} | Group-Object -Property TimeCreated
gibi bir sorgu işe yaramaz, çünkü TimeCreated sadece tarih değil saat, dakika ve saniye bilgilerini de içerir. Dolayısıyla en iyi ihtimalle güne göre değil, saniyeye göre sayı verebilir ki bu da isteğimizin çok daha üstünde bir çözünürlük.
Bunun yerine yeni bir alan oluşturmalı ve o alanı TimeCreated alanının sadece tarih bilgileri ile donatmalıyız. Kısa bir arama ile daha önce hiç kullanmadığım bir yöntem kullanan şu Stackowerflow gönderisine ulaştım:
Get-EventLog -Logname system -Source "Microsoft-Windows-GroupPolicy" -EntryType "Information" |
Add-Member Day -MemberType ScriptProperty -Value { $this.TimeGenerated.ToString('dd.MM.yyyy') } -PassThru |
Group-Object 'Day', 'Source'
Aslında bu miktarda olayı kendi bilgisayarıma aktarıp da saymak yerine yerinde yapmak daha mantıklı olurdu. Bu sebeple Invoke-Command ile yukarıdaki bilgiyi de kullanarak
Invoke-Command -ComputerName BILGISAYAR -Command { Get-WinEvent -FilterHashTable @{LogName="System";ProviderName="disk";Id=51} | Add-Member Day -MemberType ScriptProperty -Value { $this.TimeCreated.ToString("dd.MM.yyyy"} -PassThru | Group-Object "Day", "Source" -NoElement
aşağıdaki sonuca ulaştım:
Count Name PSComputerName
----- ---- --------------
2542 19.04.2021 BILGISAYAR
9044 26.01.2021 BILGISAYAR
19841 25.01.2021 BILGISAYAR
Babadan kalma yöntemlerle yapmak isteseydik
Invoke-Command -computer BILGISAYAR -command { Get-WinEvent -FilterHashtable @{LogName="System";ProviderName="disk";Id=51} | Select Id,@{N="Day";E={$_.TimeCreated.ToString("dd.MM.yyyy")}} | Group-Object 'Day' -NoElement}
gibi bir sorgu oluşturabilirdik.
Hiç yorum yok:
Yorum Gönder