Windows 的事件檢視器一直有許多人詬病,相當不好用!
光是大量的事件,就要等待半天;在加上沒辦法隨心所欲的設定關鍵字查詢
剛好前一陣子有人在問購買軟體來處理事件紀錄,個人是覺得很浪費錢。
因為現成軟體雖然方便,但是彈性很差。
所以就寫了個簡單的Powershell 程式給大家參考
Clear-Host
Remove-Variable * -ErrorAction SilentlyContinue
If(Test-Path -Path "c:\Users\admin\Desktop\Events.html" -PathType Leaf){
Remove-Item -Path "c:\Users\admin\Desktop\Events.html" -Force
}
# 用來儲存所有收集的事件
$Events = @()
# 選擇哪些類別的事件
$LogTypes = @("Application", "System", "Security")
# 選擇那些層級的訊息
$Levels = @("Warning","Error","Critical")
ForEach($LogType in $LogTypes){
Get-EventLog -LogName $LogType | Where { $_.EntryType -in $Levels} | ForEach-Object{
# 將事件設定成 hashtable 物件型式,這樣只要簡單指令就可以將資訊轉成 html, csv, json 等
$Event = @{
#Index = $_.Index
"類別" = $LogType
"產生時間" = $_.TimeGenerated
#TimeW = $_.TimeWritten
"層級" = $_.EntryType
"來源" = $_.Source
"識別碼" = $_.InstanceId
"訊息" = $_.Message
# 擷取特定資料行,然去取得部分字串,使用 replace 去除不需要的部分
#Module = ($Msg | Select-String -Pattern '失敗的模組名稱\: .*').Matches.Value -replace ",版本:.*","" -replace "失敗的模組名稱: ",""
#ECode = ($Msg | Select-String -Pattern '例外狀況代碼\: .*').Matches.Value -replace "例外狀況代碼: ",""
#AppID = ($Msg | Select-String -Pattern '失敗的處理程序識別碼\: .*').Matches.Value -replace "失敗的處理程序識別碼: ",""
#Application = ($Msg | Select-String -Pattern '失敗的應用程式路徑\: .*').Matches.Value -replace "失敗的應用程式路徑: ","" | Split-Path -Leaf
}
$Events += New-Object -TypeName PSObject -Property $Event
}
}
# 將所有事件按照發生的時間排序,然後轉成 HTML 檔(按 Property 順序排列),並在 head 加上 css 方便閱讀,最後輸出到 html 檔案
$Events | Sort-Object -Property "產生時間" |`
ConvertTo-Html -Title "System Error & Warning Event Logs" `
-Property "產生時間","類別","層級別","來源","識別碼","訊息" `
-Head "<style type='text/css'>table, tr, th, td { border-style: solid;text-align:center;vertical-align:middle;padding:5px} tr:nth-child(even) {background: #CCC} tr:nth-child(odd) {background: #FFF}</style>" | `
Out-File -FilePath "c:\Users\admin\Desktop\Events.html" -Encoding utf8
# 使用預設瀏覽器開啟檔案
Start-Process -FilePath "c:\Users\admin\Desktop\Events.html"
0 意見:
張貼留言