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 會從管線向下傳送至 Group-Object Cmdlet。 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:從多部電腦取得事件

此命令會從三部電腦上的 System 事件記錄檔取得事件: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。 物件會從管線向下傳送至 Where-Object Cmdlet。 針對管線中的每個物件, Where-Object Cmdlet 會使用 變數 $_.EventID 來比較事件識別碼屬性與指定的值。 物件會從管線向下傳送至 Select-Object Cmdlet。 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參數包含星號 () * 萬用字元來指定使用者名稱的一部分。 事件物件會從管線向下傳送至 Group-Object Cmdlet。 Group-Object 會使用 Property 參數來指定 UserName 屬性是用來群組物件,並計算每個使用者名稱的物件數目。 NoElement參數會從輸出中移除群組成員。 物件會從管線向下傳送至 Select-Object Cmdlet。 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 參數和 $Begin 變數以及 Before 參數和 $End 變數所設定。

參數

-After

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

Type:DateTime
Position:Named
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False

-AsString

表示這個 Cmdlet 會將輸出傳回為字串,而不是 物件。

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

-Before

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

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

-ComputerName

此參數會指定遠端電腦的 NetBIOS 名稱、網際網路通訊協定 (IP) 位址,或 FQDN) 的完整 (功能變數名稱。

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

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

Type:String[]
Aliases:Cn
Position:Named
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False

-Index

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

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

-InstanceId

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

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

-List

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

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

-LogName

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

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

-Message

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

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

-Newest

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

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

-Source

指定寫入此 Cmdlet 取得之記錄檔的來源字串陣列。 允許使用萬用字元。

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

-UserName

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

Type:String[]
Position:Named
Default value:None
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 預先安裝環境不支援 Cmdlet Get-EventLogGet-WinEvent (Windows PE) 。