Get-EventLog

取得本機電腦或遠端電腦上的事件記錄檔或事件記錄檔清單中的事件。

Syntax

Get-EventLog
   [-LogName] <String>
   [-ComputerName <String[]>]
   [-Newest <Int32>]
   [-After <DateTime>]
   [-Before <DateTime>]
   [-UserName <String[]>]
   [[-InstanceId] <Int64[]>]
   [-Index <Int32[]>]
   [-EntryType <String[]>]
   [-Source <String[]>]
   [-Message <String>]
   [-AsBaseObject]
   [<CommonParameters>]
Get-EventLog
   [-ComputerName <String[]>]
   [-List]
   [-AsString]
   [<CommonParameters>]

Description

Cmdlet Get-EventLog 會從本機和遠端電腦取得事件和事件記錄檔。 根據預設, Get-EventLog 會從本機計算機取得記錄。 若要從遠端電腦取得記錄,請使用 ComputerName 參數。

您可以使用 Get-EventLog 參數和屬性值來搜尋事件。 Cmdlet 會取得符合指定屬性值的事件。

包含名詞的 EventLog PowerShell Cmdlet 僅適用於Windows傳統事件記錄檔,例如應用程式、系統或安全性。 若要取得在 Windows Vista 和更新版本中使用 Windows 事件記錄技術的記錄,請使用 Get-WinEvent

注意

Get-EventLog 會使用已被取代的 Win32 API。 結果可能不正確。 請改用 Get-WinEvent Cmdlet。

範例

範例 1:取得本機電腦上的事件記錄檔

此範例會顯示本機計算機上可用的事件記錄清單。 Log 資料行中的名稱會與 LogName 參數搭配使用,以指定搜尋事件的記錄檔。

Get-EventLog -List

Max(K)   Retain   OverflowAction      Entries  Log
------   ------   --------------      -------  ---
15,168        0   OverwriteAsNeeded   20,792   Application
15,168        0   OverwriteAsNeeded   12,559   System
15,360        0   OverwriteAsNeeded   11,173   Windows PowerShell

Cmdlet Get-EventLog 會使用 List 參數來顯示可用的記錄。

範例 2:從本機電腦上的事件記錄檔取得最近的專案

此範例會從系統事件記錄檔取得最近的專案。

Get-EventLog -LogName System -Newest 5

Index   Time          EntryType    Source              InstanceID   Message
-----   ----          ---------    ------              ----------   -------
13820   Jan 17 19:16  Error        DCOM                     10016   The description for Event...
13819   Jan 17 19:08  Error        DCOM                     10016   The description for Event...
13818   Jan 17 19:06  Information  Service Control...  1073748864   The start type of the Back...
13817   Jan 17 19:05  Error        DCOM                     10016   The description for Event...
13815   Jan 17 19:03  Information  Microsoft-Windows...        35   The time service is now sync...

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統事件記錄檔。 最新參數會傳回最近五個事件。

範例 3:尋找事件記錄檔中特定項目數的所有來源

此範例示範如何尋找系統事件記錄檔中 1000 個最近專案中包含的所有來源。

$Events = Get-EventLog -LogName System -Newest 1000
$Events | Group-Object -Property Source -NoElement | Sort-Object -Property Count -Descending

Count   Name
-----   ----
  110   DCOM
   65   Service Control Manager
   51   Microsoft-Windows-Kern...
   14   EventLog
   14   BTHUSB
   13   Win32k

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 最新參數會選取 1000 個最新的事件。 事件物件會儲存在變數中 $Events 。 物件 $Events 會向下傳送至 Cmdlet 的 Group-Object 管線。 Group-Object會使用 Property 參數依來源分組物件,並計算每個來源的物件數目。 NoElement 參數會從輸出中移除群組成員。 Cmdlet Sort-Object 會使用 Property 參數,依每個來源名稱的計數排序。 遞 參數會依計數從最高到最低的順序排序列表。

範例 4:從特定事件記錄檔取得錯誤事件

此範例會從系統事件記錄檔取得錯誤事件。

Get-EventLog -LogName System -EntryType Error

Index Time          EntryType   Source  InstanceID Message
----- ----          ---------   ------  ---------- -------
13296 Jan 16 13:53  Error       DCOM    10016 The description for Event ID '10016' in Source...
13291 Jan 16 13:51  Error       DCOM    10016 The description for Event ID '10016' in Source...
13245 Jan 16 11:45  Error       DCOM    10016 The description for Event ID '10016' in Source...
13230 Jan 16 11:07  Error       DCOM    10016 The description for Event ID '10016' in Source...

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 EntryType 參數會篩選事件,只顯示 Error 事件。

範例 5:使用 InstanceId 和 Source 值從事件記錄檔取得事件

此範例會從特定 InstanceId 和 Source 的系統記錄檔取得事件。

Get-EventLog -LogName System -InstanceId 10016 -Source DCOM

Index Time          EntryType  Source  InstanceID  Message
----- ----          ---------  ------  ----------  -------
13245 Jan 16 11:45  Error      DCOM         10016  The description for Event ID '10016' in Source...
13230 Jan 16 11:07  Error      DCOM         10016  The description for Event ID '10016' in Source...
13219 Jan 16 10:00  Error      DCOM         10016  The description for Event ID '10016' in Source...

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 InstanceID 參數會選取具有指定實例標識碼的事件。 Source 參數會指定事件屬性。

範例 6:從多部計算機取得事件

此命令會從三部計算機上的系統事件記錄檔取得事件:Server01、Server02 和 Server03。

Get-EventLog -LogName System -ComputerName Server01, Server02, Server03

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 ComputerName 參數會使用逗號分隔字串來列出您要從中取得事件記錄檔的電腦。

範例 7:取得訊息中包含特定單字的所有事件

此命令會取得系統事件記錄檔中包含事件訊息中特定單字的所有事件。 您指定的 Message 參數值有可能包含在訊息的內容中,但不會顯示在 PowerShell 控制臺上。

Get-EventLog -LogName System -Message *description*

Index Time          EntryType   Source       InstanceID   Message
----- ----          ---------   ------       ----------   -------
13821 Jan 17 19:17  Error       DCOM              10016   The description for Event ID '10016'...
13820 Jan 17 19:16  Error       DCOM              10016   The description for Event ID '10016'...
13819 Jan 17 19:08  Error       DCOM              10016   The description for Event ID '10016'...

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統事件記錄檔。 Message 參數會指定要在每個事件的訊息欄位中搜尋的字組。

範例 8:顯示事件的屬性值

這個範例示範如何顯示事件的所有屬性和值。

$A = Get-EventLog -LogName System -Newest 1
$A | Select-Object -Property *

EventID            : 10016
MachineName        : localhost
Data               : {}
Index              : 13821
Category           : (0)
CategoryNumber     : 0
EntryType          : Error
Message            : The description for Event ID '10016' in Source 'DCOM'...
Source             : DCOM
ReplacementStrings : {Local,...}
InstanceId         : 10016
TimeGenerated      : 1/17/2019 19:17:23
TimeWritten        : 1/17/2019 19:17:23
UserName           : username
Site               :
Container          :

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統事件記錄檔。 最新參數會選取最新的事件物件。 物件會儲存在變數中 $A 。 變數中的 $A 物件會從管線向下傳送至 Select-Object Cmdlet。 Select-Object會使用 Property 參數搭配星號 (*) 來選取物件的所有屬性。

範例 9:使用來源和事件標識碼從事件記錄檔取得事件

這個範例會取得指定來源和事件標識碼的事件。

Get-EventLog -LogName Application -Source Outlook | Where-Object {$_.EventID -eq 63} |
              Select-Object -Property Source, EventID, InstanceId, Message

Source   EventID   InstanceId   Message
------   -------   ----------   -------
Outlook       63   1073741887   The Exchange web service request succeeded.
Outlook       63   1073741887   Outlook detected a change notification.
Outlook       63   1073741887   The Exchange web service request succeeded.

Cmdlet Get-EventLog 會使用 LogName 參數來指定 Application 事件記錄檔。 Source 參數會指定應用程式名稱 Outlook。 物件會向下傳送至 Cmdlet 的 Where-Object 管線。 對於管線中的每個物件,Cmdlet 會 Where-Object 使用 變數 $_.EventID 來比較事件標識碼屬性與指定的值。 物件會向下傳送至 Cmdlet 的 Select-Object 管線。 Select-Object會使用 Property 參數來選取要顯示在 PowerShell 控制台中的屬性。

範例 10:依屬性取得事件和群組

Get-EventLog -LogName System -UserName NT* | Group-Object -Property UserName -NoElement |
              Select-Object -Property Count, Name

Count  Name
-----  ----
6031   NT AUTHORITY\SYSTEM
  42   NT AUTHORITY\LOCAL SERVICE
   4   NT AUTHORITY\NETWORK SERVICE

Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 UserName 參數包含星號 (*) 通配符,以指定部分用戶名稱。 事件物件會向下傳送至 Cmdlet 的 Group-Object 管線。 Group-Object會使用 Property 參數來指定 UserName 屬性是用來群組物件,並計算每個使用者名稱的物件數目。 NoElement 參數會從輸出中移除群組成員。 物件會向下傳送至 Cmdlet 的 Select-Object 管線。 Select-Object會使用 Property 參數來選取要顯示在 PowerShell 控制台中的屬性。

範例 11:取得在特定日期和時間範圍內發生的事件

本範例會從系統事件記錄檔中取得指定日期和時間範圍的 Error 事件。 BeforeAfter 參數會設定日期和時間範圍,但會從輸出中排除。

$Begin = Get-Date -Date '1/17/2019 08:00:00'
$End = Get-Date -Date '1/17/2019 17:00:00'
Get-EventLog -LogName System -EntryType Error -After $Begin -Before $End

Index Time          EntryType   Source   InstanceID  Message
----- ----          ---------   ------   ----------  -------
13821 Jan 17 13:40  Error       DCOM          10016  The description for Event ID...
13820 Jan 17 13:11  Error       DCOM          10016  The description for Event ID...
...
12372 Jan 17 10:08  Error       DCOM          10016  The description for Event ID...
12371 Jan 17 09:04  Error       DCOM          10016  The description for Event ID...

Cmdlet Get-Date 會使用 Date 參數來指定日期和時間。 DateTime 物件會儲存在和 $End 變數中$Begin。 Cmdlet Get-EventLog 會使用 LogName 參數來指定系統記錄檔。 EntryType 參數會指定 Error 事件類型。 日期和時間範圍是由 After 參數和變數以及 $BeginBefore 參數和 $End 變數所設定。

參數

-After

取得指定日期和時間之後發生的事件。 After 參數日期和時間會從輸出中排除。 輸入 DateTime 物件,例如 Cmdlet 所Get-Date傳回的值。

Type:DateTime
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsBaseObject

指出此 Cmdlet 會針對每個事件傳回標準 System.Diagnostics.EventLogEntry 物件。 如果沒有此參數,Get-EventLog則會傳回具有其他 EventLogNameSourceInstanceId 屬性的擴充 PSObject 物件。

若要查看此參數的效果,請將事件管線傳送至 Get-Member Cmdlet,並檢查 結果中的 TypeName 值。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AsString

表示此 Cmdlet 會將輸出當做字串傳回,而不是物件。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Before

取得指定日期和時間之前發生的事件。 Before 參數日期和時間會從輸出中排除。 輸入 DateTime 物件,例如 Cmdlet 所Get-Date傳回的值。

Type:DateTime
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

此參數會指定遠端計算機的 NetBIOS 名稱、因特網通訊協定 (IP) 位址或完整功能變數名稱 (FQDN)。

如果未指定 ComputerName 參數,Get-EventLog預設為本機電腦。 參數也會接受點 (.) 來指定本機計算機。

ComputerName 參數不依賴 Windows PowerShell 遠端功能。 即使您的電腦未設定為執行遠端命令,您也可以搭配 ComputerName 參數使用Get-EventLog

Type:String[]
Aliases:Cn
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EntryType

指定做為字串數位,這個 Cmdlet 取得的事件項目類型。

此參數可接受的值為:

  • 錯誤
  • 資訊
  • FailureAudit
  • SuccessAudit
  • 警告
Type:String[]
Aliases:ET
Accepted values:Error, Information, FailureAudit, SuccessAudit, Warning
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Index

指定要從事件記錄檔取得的索引值。 參數接受以逗號分隔的值字串。

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

指定要從事件記錄檔取得的實例標識碼。 參數接受以逗號分隔的值字串。

Type:Int64[]
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-List

顯示電腦上的事件記錄清單。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LogName

指定一個事件記錄檔的名稱。 若要尋找記錄檔名稱,請使用 Get-EventLog -List。 允許通配符。 此為必要參數。

Type:String
Aliases:LN
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Message

指定事件訊息中的字串。 您可以使用此參數來搜尋包含特定單字或片語的訊息。 允許通配符。

Type:String
Aliases:MSG
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Newest

從最新的事件開始,並取得指定的事件數目。 需要事件數目,例如 -Newest 100。 指定傳回的事件數目上限。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Source

指定以字串陣列的形式,將寫入此 Cmdlet 取得的記錄檔來源。 允許通配符。

Type:String[]
Aliases:ABO
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-UserName

指定以字串陣列的形式指定與事件相關聯的用戶名稱。 輸入名稱或名稱模式,例如 User01User*Domain01\User*。 允許通配符。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

輸入

None

您無法使用管線將輸入傳送至 Get-EventLog

輸出

System.Diagnostics.EventLogEntry. System.Diagnostics.EventLog. System.String

如果指定 LogName 參數,輸出是 System.Diagnostics.EventLogEntry 物件的集合

如果只指定 List 參數,則輸出是 System.Diagnostics.EventLog 物件的集合

如果同時指定 ListAsString 參數,則輸出是 System.String 物件的集合

備註

Windows 預安裝環境 (Windows PE) 不支援 Cmdlet Get-EventLogGet-WinEvent