每個Windows系統管理員可能都熟悉Windows事件日誌。在PowerShell中使用這個cmdlet允許系統管理員一次解析多個計算機上的大量事件。它使系統管理員不必在事件查看器中點擊來找到正確的過濾器和確定關鍵事件存儲在何處。然而,Get-EventLog
確實有其缺點,您將看到。
使用Get-EventLog列出事件日誌
Get-EventLog cmdlet在所有現代版本的Windows PowerShell上都可用。在最簡單的用法中,該cmdlet需要查詢的事件日誌,然後顯示該事件日誌中的所有事件。
但是,如果您一開始不知道事件日誌的名稱該怎麼辦?在這種情況下,我們需要找出本地計算機上可用的所有事件日誌。我們可以使用命令Get-EventLog -List
來完成這一點。

您可以看到,我在本地系統上有幾個事件日誌,但您可能想知道其他事件日誌在哪裡?在事件查看器的”應用程式和服務日誌”下顯示了數十個其他事件日誌。為什麼它們不在這裡呢?
如果您需要這些事件,不幸的是,Get-EventLog
不會起作用。相反,您需要查看Get-WinEvent。目前,Get-EventLog cmdlet可以被視為遺留的cmdlet,但是我仍然經常使用它,只是因為它非常容易使用。
使用Get-EventLog進行事件查詢
現在我們已經知道所有可用的事件日誌,我們可以讀取這個事件日誌中的事件。也許我想看到應用程式事件日誌中的所有事件。要獲取這些事件,我需要在 Get-EventLog
中指定 LogName
參數,然後該命令將返回該事件日誌中的所有事件。

默認情況下,你只會在輸出中看到六個屬性:
Index
Time
EntryType
Source
InstanceId
Message
實際上,Get-EventLog
返回了其中的 16 個屬性。你只看到六個是因為 PowerShell 的格式設定規則定義了輸出。以下是通過將 Get-EventLog
管道到 Select-Object
並選擇所有屬性找到的實際輸出的示例。

使用 Get-EventLog 進行過濾
當查找事件時,很可能我們不需要所有事件。相反,我們只需要一些。在這種情況下,我們需要過濾特定的事件。 Get-EventLog
有幾種不同的方法可以做到這一點。這個命令可以根據時間戳、記錄類型、事件 ID、消息、來源和用戶名進行過濾。這滿足了大多數查找事件的方式。
為了示範過濾功能,也許我會定期查詢事件並尋找最新的十個事件。在這種情況下,我可以使用 “Newest” 參數並指定我想看到的事件數量。”Get-EventLog -LogName Application -Newest 10″ 只會返回最新的十個事件。
也許我想找到特定時間點之後的所有事件。為此,我們有 “After” 參數。”After” 參數接受一個日期/時間,所以如果我只想找到在應用程式日誌中發生在 2019/1/26 10:17 AM 之後的事件,我可以這樣做 “Get-EventLog -LogName Application -After ‘1/26/19 10:17′”。我們也可以進行相同的過程,但選擇在某個日期之前發生的事件,你可能已經猜到了,使用 “Before” 參數。
“Get-EventLog” 有很多不同的過濾方式,不僅僅基於時間戳。我們還可以基於其他屬性,如事件 ID(實例 ID)和消息來過濾事件,這些通常是常見的搜索屬性。也許我知道我正在尋找 ID 為 916 的事件;我們將 916 傳遞給 “InstanceId” 參數。
我們也可以結合過濾器。也許返回了許多 ID 為 916 的事件,但我只想要那些消息中包含 “svchost” 字串的事件。在這種情況下,我們可以在 “Get-EventLog” 中添加 “Message” 參數,並指定像 svchost 這樣的通配符。
額外的腳本!
您需要一个在真实世界脚本中使用Get-EventLog的很好的例子吗?如果是的话,您真幸运!下面是一个高级用例的Get-EventLog
,您可以立即下载和使用!
摘要
如果你需要快速查询常见的事件日志,Get-EventLog
cmdlet是一个很好的命令。它易于使用,并提供了一些基本的过滤能力。然而,如果您需要进行任何深入的事件日志调查,Get-WinEvent
命令可能更适合,但它使用起来较困难,有时需要了解类似XPath的语法。