Get-EventLog

获取本地计算机或远程计算机上的事件日志中的事件或事件日志列表。

语法

Get-EventLog
   [-LogName] <string>
   [[-InstanceId] <long[]>]
   [-ComputerName <string[]>]
   [-Newest <int>]
   [-After <datetime>]
   [-Before <datetime>]
   [-UserName <string[]>]
   [-Index <int[]>]
   [-EntryType <String[]>]
   [-Source <String[]>]
   [-Message <String>]
   [-AsBaseObject]
   [<CommonParameters>]
Get-EventLog
   [-ComputerName <String[]>]
   [-List]
   [-AsString]
   [<CommonParameters>]

说明

cmdlet Get-EventLog 从本地和远程计算机获取事件和事件日志。 默认情况下, Get-EventLog 从本地计算机获取日志。 若要从远程计算机获取日志,请使用 ComputerName 参数。

可以使用 Get-EventLog 参数和属性值来搜索事件。 cmdlet 获取与指定属性值匹配的事件。

包含名词的 EventLog PowerShell cmdlet 仅适用于 Windows 经典事件日志,例如应用程序、系统或安全。 若要在 Windows Vista 和更高版本的 Windows 版本中获取使用 Windows 事件日志技术的日志,请使用 Get-WinEvent

示例

示例 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 参数指定系统事件日志。 Newest 参数返回最近发生的五个事件。

示例 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 参数选择具有指定实例 ID 的事件。 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 参数指定系统事件日志。 Newest 参数选择最新的事件对象。 对象存储在 变量中 $A 。 变量中的 $A 对象在管道中向下发送到 Select-Object cmdlet。 Select-Object 使用带有星号的 Property 参数 (*) 来选择对象的所有属性。

示例 9:使用源和事件 ID 从事件日志中获取事件

此示例获取指定源和事件 ID 的事件。

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 参数指定应用程序事件日志。 Source 参数指定应用程序名称 Outlook。 对象在管道中向下发送到 Where-Object cmdlet。 对于管道中的每个对象, Where-Object cmdlet 使用 变量 $_.EventID 将事件 ID 属性与指定值进行比较。 对象在管道中向下发送到 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:获取在特定日期和时间范围内发生的事件

此示例从系统事件日志中获取指定日期和时间范围内的错误事件。 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 名称、Internet 协议 (IP) 地址或完全限定的域名 (FQDN) 。

如果未指定 ComputerName 参数, Get-EventLog 则默认为本地计算机。 参数还接受点 (.) 来指定本地计算机。

ComputerName 参数不依赖于Windows PowerShell远程处理。 即使计算机未配置为运行远程命令,也可以使用 Get-EventLogComputerName 参数。

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:int[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InstanceId

指定要从事件日志获取的实例 ID。 参数接受以逗号分隔的值字符串。

Type:long[]
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:Int
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