捐血一袋救人一命

2021年7月27日 星期二

使用 Powershell 讀取系統事件檢視器的錯誤訊息及警告,然後輸出成 HTML 檔案

 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 意見: