Get-WinEvent

获取本地和远程计算机上的事件日志和事件跟踪日志文件中的事件。

语法

Get-WinEvent
   [[-LogName] <String[]>]
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-ListLog] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-Force]
   [<CommonParameters>]
Get-WinEvent
   [-ListProvider] <String[]>
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [<CommonParameters>]
Get-WinEvent
   [-ProviderName] <String[]>
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-Path] <String[]>
   [-MaxEvents <Int64>]
   [-Credential <PSCredential>]
   [-FilterXPath <String>]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterHashtable] <Hashtable[]>
   [-Force]
   [-Oldest]
   [<CommonParameters>]
Get-WinEvent
   [-MaxEvents <Int64>]
   [-ComputerName <String>]
   [-Credential <PSCredential>]
   [-FilterXml] <XmlDocument>
   [-Oldest]
   [<CommonParameters>]

说明

此 cmdlet 仅在 Windows 平台上可用。

Get-WinEvent cmdlet 从事件日志(包括经典日志)获取事件,例如系统应用程序日志。 该 cmdlet 从 Windows Vista 中引入的 Windows 事件日志技术生成的事件日志中获取数据,以及由 windows 事件跟踪 (ETW) 生成的日志文件中的事件。 默认情况下,Get-WinEvent 按最新到最早的顺序返回事件信息。

Get-WinEvent 列出事件日志和事件日志提供程序。 若要中断命令,请按 CTRL+C。 可以从所选的日志或从所选的事件提供程序生成的日志中获取事件。 还可以将来自多个源的事件组合到单个命令中。 Get-WinEvent 允许使用 XPath 查询、结构化 XML 查询和哈希表查询筛选事件。

如果未以管理员身份运行 PowerShell,则可能会看到错误消息,无法检索有关日志的信息。

示例

示例 1:从本地计算机获取所有日志

此命令将获取本地计算机上的所有事件日志。 日志按 Get-WinEvent 获取日志的顺序列出。 首先检索经典日志,然后检索新的 Windows 事件日志。 日志的 RecordCount 可以为 null(为空或零)。

Get-WinEvent -ListLog *

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14500 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        3015 CxAudioSvcLog
Circular            20971520             ForwardedEvents
Circular            20971520           0 HardwareEvents

Get-WinEvent cmdlet 从计算机获取日志信息。 ListLog 参数使用星号 (*) 通配符来显示有关每个日志的信息。

示例 2:获取经典安装日志

此命令获取表示经典安装程序日志的 EventLogConfiguration 对象。 该对象包括有关日志的信息,例如文件大小、提供程序、文件路径以及是否启用日志。

Get-WinEvent -ListLog Setup | Format-List -Property *

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Setup
LogType                        : Operational
LogIsolation                   : Application
IsEnabled                      : True
IsClassicLog                   : False
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Setup.evtx
MaximumSizeInBytes             : 1052672
LogMode                        : Circular
OwningProviderName             : Microsoft-Windows-Eventlog
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

Get-WinEvent cmdlet 使用 ListLog 参数来指定安装程序日志。 该对象将通过管道向下发送到 Format-List cmdlet。 Format-List 使用带有星号(*)通配符的属性参数来显示每个属性。

示例 3:配置经典安全日志

此命令获取表示经典安全日志的 EventLogConfiguration 对象。 然后,该对象用于配置日志的设置,例如最大文件大小、文件路径以及是否启用日志。

$log = Get-WinEvent -ListLog Security
$log.MaximumSizeInBytes = 1gb
try{
   $log.SaveChanges()
   Get-WinEvent -ListLog Security | Format-List -Property *
}catch [System.UnauthorizedAccessException]{
   $ErrMsg  = 'You do not have permission to configure this log!'
   $ErrMsg += ' Try running this script with administrator privileges. '
   $ErrMsg += $_.Exception.Message
   Write-Error $ErrMsg
}

FileSize                       : 69632
IsLogFull                      : False
LastAccessTime                 : 3/13/2019 09:41:46
LastWriteTime                  : 3/13/2019 09:41:46
OldestRecordNumber             : 1
RecordCount                    : 23
LogName                        : Security
LogType                        : Administrative
LogIsolation                   : Custom
IsEnabled                      : True
IsClassicLog                   : True
SecurityDescriptor             : O:BAG:SYD: ...
LogFilePath                    : %SystemRoot%\System32\Winevt\Logs\Security.evtx
MaximumSizeInBytes             : 1073741824
LogMode                        : Circular
OwningProviderName             :
ProviderNames                  : {Microsoft-Windows-WUSA, Microsoft-Windows-ActionQueue...
ProviderLevel                  :
ProviderKeywords               :
ProviderBufferSize             : 64
ProviderMinimumNumberOfBuffers : 0
ProviderMaximumNumberOfBuffers : 64
ProviderLatency                : 1000
ProviderControlGuid            :

Get-WinEvent cmdlet 使用 ListLog 参数来指定安全日志。 对象将保存到变量中。 MaximumSizeInBytes 属性在对象上设置为 1 GB。 调用 SaveChanges 方法,将更改推送到试用块内的系统以处理访问冲突。 Get-WinEvent cmdlet 在安全日志上再次调用,并通过管道传递给 Format-List cmdlet,以验证计算机上是否已保存 MaximumSizeInBytes 属性。

示例 4:从服务器获取事件日志

此命令仅获取包含事件的本地计算机上的事件日志。 日志的 RecordCount 可以为 null 或零。 该示例使用 $_ 变量。 有关详细信息,请参阅 about_Automatic_Variables

Get-WinEvent -ListLog * -ComputerName localhost | Where-Object { $_.RecordCount }

LogMode   MaximumSizeInBytes RecordCount LogName
-------   ------------------ ----------- -------
Circular            15532032       14546 Application
Circular             1052672         117 Azure Information Protection
Circular             1052672        2990 CxAudioSvcLog
Circular             1052672           9 MSFTVPN Setup
Circular             1052672         282 OAlerts

Get-WinEvent cmdlet 从计算机获取日志信息。 ListLog 参数使用星号 (*) 通配符来显示有关每个日志的信息。 ComputerName 参数指定从本地计算机获取日志,localhost。 对象沿管道向下发送到 Where-Object cmdlet。 Where-Object 使用 $_.RecordCount 仅返回包含数据的日志。 $_ 是一个代表管道中当前对象的变量。 RecordCount 是具有非 null 值的对象的属性。

示例 5:从多个服务器获取事件日志

此示例获取表示三台计算机上应用程序事件日志的对象:Server01、Server02 和 Server03。 使用 ForEach 关键字,因为 ComputerName 参数只接受一个值。 有关详细信息,请参阅 about_Foreach

$S = 'Server01', 'Server02', 'Server03'
ForEach ($Server in $S) {
  Get-WinEvent -ListLog Application -ComputerName $Server |
    Select-Object LogMode, MaximumSizeInBytes, RecordCount, LogName,
      @{name='ComputerName'; expression={$Server}} |
    Format-Table -AutoSize
}

LogMode MaximumSizeInBytes RecordCount LogName     ComputerName
 ------- ------------------ ----------- -------     ------------
Circular           15532032       14577 Application Server01
Circular           15532032        9689 Application Server02
Circular           15532032        5309 Application Server03

变量 $S 存储三个服务器的名称:Server01Server02Server03ForEach 语句使用循环来处理每个服务器,($Server in $S)。 大括号({ })中的脚本块运行 Get-WinEvent 命令。 ListLog 参数指定应用程序日志。 ComputerName 参数使用变量 $Server 从每台服务器获取日志信息。

对象沿管道向下发送到 Select-Object cmdlet。 Select-Object 获取 LogMode MaximumSizeInBytesRecordCountLogName 属性,并使用计算表达式通过 $Server 变量显示 ComputerName 。 将对象沿管道向下发送到 Format-Table cmdlet,以显示 PowerShell 控制台中的输出。 自动调整大小参数设置输出格式以适应屏幕。

示例 6:获取事件日志提供程序和日志名称

此命令获取事件日志提供程序及其写入的日志。

Get-WinEvent -ListProvider *

Name     : .NET Runtime
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : .NET Runtime Optimization Service
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Get-WinEvent cmdlet 从计算机获取日志信息。 ListProvider 参数使用星号(*)通配符来显示有关每个提供程序的信息。 在输出中,Name 是提供程序,LogLinks 是提供程序写入的日志。

示例 7:获取写入到特定日志的所有事件日志提供程序

此命令获取写入应用程序日志的所有提供程序。

(Get-WinEvent -ListLog Application).ProviderNames

.NET Runtime
.NET Runtime Optimization Service
Application
Application Error
Application Hang
Application Management

Get-WinEvent cmdlet 从计算机获取日志信息。 ListLog 参数使用应用程序获取该日志的对象。 ProviderNames 是对象的属性,并显示写入应用程序日志的提供程序。

示例 8:获取包含特定字符串的事件日志提供程序名称

此命令获取包含提供程序名称中特定字符串的名称的事件日志提供程序。

Get-WinEvent -ListProvider *Policy*

Name     : Group Policy Applications
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Client
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Name     : Group Policy Data Sources
LogLinks : {Application}
Opcodes  : {}
Tasks    : {}

Get-WinEvent cmdlet 从计算机获取日志信息。 ListProvider 参数使用星号(*)通配符查找提供程序名称中的任何位置的策略

示例 9:获取事件提供程序生成的事件 ID

此命令列出了 Microsoft-Windows-GroupPolicy 事件提供程序生成的事件 ID 以及事件说明。

(Get-WinEvent -ListProvider Microsoft-Windows-GroupPolicy).Events | Format-Table Id, Description

Id  Description
  --  -----------
1500  The Group Policy settings for the computer were processed successfully...
1501  The Group Policy settings for the user were processed successfully...
4115  Group Policy Service started.
4116  Started the Group Policy service initialization phase.
4117  Group Policy Session started.

Get-WinEvent cmdlet 从计算机获取日志信息。 ListProvider 参数指定提供程序,Microsoft-Windows-GroupPolicy。 表达式包装在括号中,并使用事件属性获取对象。 对象沿管道向下发送到 Format-Table cmdlet。 Format-Table 显示事件对象的 ID说明

示例 10:从事件对象属性获取日志信息

此示例演示如何使用事件对象属性获取有关日志内容的信息。 事件对象存储在变量中,然后按事件 ID级别进行分组和计数。

$Event = Get-WinEvent -LogName 'Windows PowerShell'
$Event.Count
$Event | Group-Object -Property Id -NoElement | Sort-Object -Property Count -Descending
$Event | Group-Object -Property LevelDisplayName -NoElement

195

Count  Name
-----  ----
  147  600
   22  400
   21  601
    3  403
    2  103

Count  Name
-----  ----
    2  Warning
  193  Information

Get-WinEvent cmdlet 使用 LogName 参数来指定 Windows PowerShell 事件日志。 事件对象存储在 $Event 变量中。 $Event Count 属性显示记录的事件总数。

$Event 变量将管道向下发送到 Group-Object cmdlet。 Group-Object 使用 Property 参数指定 ID 属性,并按事件 ID 值对对象进行计数。 NoElement 参数从对象输出中删除其他属性。 分组对象沿管道向下发送到 Sort-Object cmdlet。 Sort-Object 使用 Property 参数按计数对对象进行排序。 Descending 参数按计数显示输出,从高到低。 在输出中,计数列包含每个事件的总数。 名称列包含分组的事件 ID 编号。

$Event 变量将管道向下发送到 Group-Object cmdlet。 Group-Object 使用 Property 参数指定 LevelDisplayName 属性,并通过 LevelDisplayName 对对象进行计数。 对象按警告信息等级别分组。 NoElement 参数从输出中删除其他属性。 在输出中,计数列包含每个事件的总数。 名称列包含分组 LevelDisplayName

示例 11:获取名称中具有指定字符串的错误事件

此示例使用以逗号分隔的日志名称字符串。 输出按错误或警告和日志名称等级别分组。

Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* |
  Group-Object -Property LevelDisplayName, LogName -NoElement |
    Format-Table -AutoSize

Count  Name
-----  ----
    1  Error, PowerShellCore/Operational
   26  Information, Microsoft-Windows-Kernel-WHEA/Operational
  488  Information, Microsoft-Windows-PowerShell/Operational
   77  Information, PowerShellCore/Operational
 9835  Information, Windows PowerShell
   19  Verbose, PowerShellCore/Operational
  444  Warning, Microsoft-Windows-PowerShell/Operational
  512  Warning, PowerShellCore/Operational

Get-WinEvent cmdlet 从计算机获取日志信息。 LogName 参数使用带星号(*)通配符的逗号分隔字符串来指定日志名称。 对象沿管道向下发送到 Group-Object cmdlet。 Group-Object 使用 Property 参数按 LevelDisplayNamelogName 对对象进行分组。 NoElement 参数从输出中删除其他属性。 分组对象沿管道向下发送到 Format-Table cmdlet。 Format-Table 使用 AutoSize 参数设置列的格式。 计数列包含每个事件的总数。 名称列包含分组 LevelDisplayNameLogName

示例 12:从存档事件日志获取事件

Get-WinEvent 可以从保存的日志文件中获取事件信息。 此示例使用存储在本地计算机上的存档 PowerShell 日志。

Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'

ProviderName: PowerShell

TimeCreated              Id LevelDisplayName  Message
-----------              -- ----------------  -------
3/15/2019 13:54:13      403 Information       Engine state is changed from Available to Stopped...
3/15/2019 13:54:13      400 Information       Engine state is changed from None to Available...
3/15/2019 13:54:13      600 Information       Provider "Variable" is Started...
3/15/2019 13:54:13      600 Information       Provider "Function" is Started...
3/15/2019 13:54:13      600 Information       Provider "FileSystem" is Started...

Get-WinEvent cmdlet 从计算机获取日志信息。 Path 参数指定目录和文件名。

示例 13:从存档事件日志获取特定数量的事件

这些命令从存档事件日志中获取特定数量的事件。 Get-WinEvent 具有可获取最大事件数或最早事件的参数。 此示例使用存储在 C:\Test\PowerShellCore Operational.evtx 中的存档 PowerShell 日志。

Get-WinEvent -Path 'C:\Test\PowerShellCore Operational.evtx' -MaxEvents 100

ProviderName: PowerShellCore

TimeCreated                 Id   LevelDisplayName  Message
-----------                 --   ----------------  -------
3/15/2019 09:54:54        4104   Warning           Creating Scriptblock text (1 of 1):...
3/15/2019 09:37:13       40962   Information       PowerShell console is ready for user input
3/15/2019 07:56:24        4104   Warning           Creating Scriptblock text (1 of 1):...
...
3/7/2019 10:53:22        40961   Information       PowerShell console is starting up
3/7/2019 10:53:22         8197   Verbose           Runspace state changed to Opening
3/7/2019 10:53:22         8195   Verbose           Opening RunspacePool

Get-WinEvent cmdlet 从计算机获取日志信息。 Path 参数指定目录和文件名。 MaxEvents 参数指定显示 100 条记录(从最新到最旧)。

示例 14:Windows 事件跟踪

Windows 事件跟踪 (ETW) 在事件发生时将事件写入日志。 事件按最早到最新的顺序存储。 存档的 ETW 文件另存为 .etl,例如 TraceLog.etl。 事件按写入日志的顺序列出,因此需要最早的参数。

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl' -Oldest |
  Sort-Object -Property TimeCreated -Descending |
    Select-Object -First 100

Get-WinEvent cmdlet 从存档文件获取日志信息。 Path 参数指定目录和文件名。 Oldest 参数用于按事件写入的顺序输出事件,从最早到最新。 将对象沿管道向下发送到 Sort-Object cmdlet,Sort-ObjectTimeCreated 属性的值按降序对对象进行排序。 对象沿管道向下发送到显示 100 个最新事件的 Select-Object cmdlet。

示例 15:从事件跟踪日志获取事件

此示例演示如何从事件跟踪日志文件 (.etl) 和存档的 Windows PowerShell 日志文件 (.evtx) 获取事件。 可以将多个文件类型组合到单个命令中。 由于文件包含相同类型的 .NET Framework 对象,EventLogRecord,因此可以使用相同的属性对其进行筛选。 该命令需要 Oldest 参数,因为它从 .etl 文件中读取,但最早的参数适用于每个文件。

Get-WinEvent -Path 'C:\Tracing\TraceLog.etl', 'C:\Test\Windows PowerShell.evtx' -Oldest |
  Where-Object { $_.Id -eq '403' }

Get-WinEvent cmdlet 从存档文件获取日志信息。 Path 参数使用逗号分隔的列表来指定每个文件目录和文件名。 Oldest 参数用于按事件写入的顺序输出事件,从最早到最新。 对象沿管道向下发送到 Where-Object cmdlet。 Where-Object 使用脚本块查找 ID403 的事件。 $_ 变量表示管道中的当前对象,ID 是事件 ID 属性。

示例 16:筛选事件日志结果

此示例演示了从事件日志中筛选和选择事件的各种方法。 所有这些命令从 Windows PowerShell 事件日志获取过去 24 小时内发生的事件。 筛选器方法比使用 Where-Object cmdlet 更高效。 在检索对象时应用筛选器。 Where-Object 检索所有对象,然后将筛选器应用于所有对象。

# Using the Where-Object cmdlet:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -LogName 'Windows PowerShell' | Where-Object { $_.TimeCreated -ge $Yesterday }

# Using the FilterHashtable parameter:
$Yesterday = (Get-Date) - (New-TimeSpan -Day 1)
Get-WinEvent -FilterHashtable @{ LogName='Windows PowerShell'; Level=3; StartTime=$Yesterday }

# Using the FilterXML parameter:
$xmlQuery = @'
<QueryList>
  <Query Id="0" Path="Windows PowerShell">
    <Select Path="System">*[System[(Level=3) and
        TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select>
  </Query>
</QueryList>
'@
Get-WinEvent -FilterXML $xmlQuery

# Using the FilterXPath parameter:
$XPath = '*[System[Level=3 and TimeCreated[timediff(@SystemTime) <= 86400000]]]'
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath $XPath

示例 17:使用 FilterHashtable 从应用程序日志获取事件

此示例使用 FilterHashtable 参数从应用程序日志中获取事件。 哈希表将使用键/值对。 有关 FilterHashtable 参数的详细信息,请参阅 使用 FilterHashtable 创建 Get-WinEvent 查询。 有关哈希表的详细信息,请参阅 about_Hash_Tables

$Date = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; StartTime=$Date; Id='1003' }

Get-Date cmdlet 使用 AddDays 方法获取当前日期前两天的日期。 日期对象存储在 $Date 变量中。

Get-WinEvent cmdlet 获取日志信息。 FilterHashtable 参数用于筛选输出。 LogName 键将值指定为应用程序日志。 StartTime 键使用存储在 $Date 变量中的值。 ID 键使用事件 ID 值,1003

示例 18:使用 FilterHashtable 获取应用程序错误

此示例使用 FilterHashtable 参数查找上周发生的 Internet Explorer 应用程序错误。

$StartTime = (Get-Date).AddDays(-7)
Get-WinEvent -FilterHashtable @{
  Logname='Application'
  ProviderName='Application Error'
  Data='iexplore.exe'
  StartTime=$StartTime
}

Get-Date cmdlet 使用 AddDays 方法获取当前日期之前的七天的日期。 日期对象存储在 $StartTime 变量中。

Get-WinEvent cmdlet 获取日志信息。 FilterHashtable 参数用于筛选输出。 LogName 键将值指定为应用程序日志。 ProviderName 键使用值,应用程序错误,这是事件的数据键使用 iexplore.exeStartTime 键使用存储在 $StartTime 变量中的值。

示例 19:使用 SuppressHashFilter 筛选应用程序错误

与上面的示例 16 类似,此示例使用 FilterHashtable 参数从应用程序日志中获取事件。 不过,我们添加了 SuppressHashFilter 键来筛选掉信息级别的事件。

$Date = (Get-Date).AddDays(-2)
$filter = @{
  LogName='Application'
  StartTime=$Date
  SuppressHashFilter=@{Level=4}
}
Get-WinEvent -FilterHashtable $filter

在此示例中,Get-WinEvent 获取过去两天内应用程序日志中的所有事件,但具有 4(信息)级别的事件除外。

参数

-ComputerName

指定此 cmdlet 从事件日志中获取事件的计算机的名称。 键入计算机的 NetBIOS 名称、IP 地址或完全限定的域名 (FQDN)。 默认值为本地计算机,localhost。 此参数一次只能接受一个计算机名称。

若要从远程计算机获取事件日志,请将事件日志服务的防火墙端口配置为允许远程访问。

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

Type:String
Aliases:Cn
Position:Named
Default value:Local computer
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

指定有权执行此操作的用户帐户。 默认值为当前用户。

键入用户名,如 User01Domain01\User01。 或者,输入 PSCredential 对象,例如由 Get-Credential cmdlet 生成的对象。 如果键入用户名,则将提示你输入密码。 如果仅键入参数名称,系统会提示输入用户名和密码。

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilterHashtable

指定哈希表格式的查询,以从一个或多个事件日志中选择事件。 查询包含一个或多个键/值对的哈希表。

哈希表查询具有以下规则:

  • 键和值不区分大小写。
  • 通配符仅在与 LogName 键和 ProviderName 键关联的值中有效。
  • 每个键仅可以在每个哈希表中列出一次。
  • 路径值采用 .etl.evt.evtx 日志文件的路径。
  • 可以在同一查询中使用 LogName路径ProviderName 键。
  • UserID 密钥可以采用有效的安全标识符 (SID) 或域名,该名称可用于构造有效的 System.Security.Principal.NTAccount 对象
  • 数据值采用未命名字段中的事件数据。 例如,经典事件日志中的事件。
  • <named-data> 键表示命名事件数据字段。

Get-WinEvent 无法解释键/值对时,它将键解释为事件中事件数据区分大小写的名称。

有效Get-WinEvent键/值对如下所示:

  • LogName=<String[]>
  • ProviderName=<String[]>
  • Path=<String[]>
  • 关键字=<Long[]>
  • ID=<Int32[]>
  • Level=<Int32[]>
  • StartTime=<DateTime>
  • EndTime=<DateTime>
  • UserID=<SID>
  • 数据=<String[]>
  • <named-data>=<String[]>
  • SuppressHashFilter=<Hashtable>
Type:Hashtable[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-FilterXml

指定此 cmdlet 从一个或多个事件日志中选择事件的结构化 XML 查询。

若要生成有效的 XML 查询,请在 Windows 事件查看器中使用创建自定义视图筛选当前日志功能。 使用对话框中的项创建查询,然后单击 XML 选项卡以查看 XML 格式的查询。 可以将该 XML 从 XML 选项卡复制到 FilterXml 参数的值中。 有关事件查看器功能的详细信息,请参阅“事件查看器帮助”。

使用 XML 查询创建包含多个 XPath 语句的复杂查询。 XML 格式还允许使用禁止 XML 元素,该元素从查询中排除事件。 有关事件日志查询的 XML 架构的详细信息,请参阅查询架构事件选择的 XML 事件查询部分。

还可以使用 FilterHashtable 参数创建 Suppress 元素。

Type:XmlDocument
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-FilterXPath

指定此 cmdlet 从一个或多个日志中选择事件的 XPath 查询。

有关 XPath 语言的详细信息,请参阅 XPath 参考事件选择的“选择筛选器”部分。

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

-Force

获取调试和分析日志以及其他事件日志。 当名称参数的值包含通配符时,需要使用 Force 参数才能获取调试或分析日志。

默认情况下,除非指定调试或分析日志的全名,否则 Get-WinEvent cmdlet 将排除这些日志。

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

-ListLog

指定事件日志。 在以逗号分隔的列表中输入事件日志名称。 允许使用通配符。 若要获取所有日志,请使用星号 (*) 通配符。

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

-ListProvider

指定此 cmdlet 获取的事件日志提供程序。 事件日志提供程序是可将事件写入事件日志的一种程序或服务。

在以逗号分隔的列表中输入提供程序名称。 允许使用通配符。 若要获取计算机上的所有事件日志的提供程序,请使用星号 (*) 通配符。

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

-LogName

指定此 cmdlet 从中获取事件的事件日志。 在以逗号分隔的列表中输入事件日志名称。 允许使用通配符。 还可以通过管道将日志名称传递给 Get-WinEvent cmdlet。

注意

PowerShell 不会限制可以请求的日志量。 但是,Get-WinEvent cmdlet 查询限制为 256 的 Windows API。 这会造成一次难以筛选所有日志。 可以使用 foreach 循环循环遍历每个日志,如下所示:Get-WinEvent -ListLog * | ForEach-Object{ Get-WinEvent -LogName $_.Logname }

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

-MaxEvents

指定返回的最大事件数。 输入一个整数,例如 100。 默认设置为返回日志或文件中的所有事件。

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

-Oldest

指示此 cmdlet 按最早优先顺序获取事件。 默认情况下,事件按从新到旧的顺序返回。

此参数需要从 .etl.evt 文件和调试和分析日志中获取事件。 在这些文件中,事件按从旧到新的顺序记录,并且只能按从旧到新的顺序返回。

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

-Path

指定此 cmdlet 从中获取事件的事件日志文件的路径。 在以逗号分隔的列表中输入日志文件的路径,或使用通配符来创建文件路径模式。

Get-WinEvent 支持具有 .evt.evtx.etl 文件扩展名的文件。 可以在同一命令中包括来自不同文件和文件类型的事件。

Type:String[]
Aliases:PSPath
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-ProviderName

指定此 cmdlet 从中获取事件的事件日志提供程序作为字符串数组。 在以逗号分隔的列表中输入提供程序名称,或使用通配符来创建提供程序名称模式。

事件日志提供程序是可将事件写入事件日志的一种程序或服务。 它不是 PowerShell 提供程序。

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

输入

String

可以通过管道将 LogName(字符串)传递给此 cmdlet。

XmlDocument

可以通过管道将 FilterXML 查询传递给此 cmdlet。

Hashtable

可以通过管道将 FilterHashtable 查询传递给此 cmdlet。

输出

EventLogConfiguration

使用 ListLog 参数,此 cmdlet 返回 EventLogConfiguration 对象。

EventLogRecord

默认情况下,此 cmdlet 返回 EventLogRecord 对象。

ProviderMetadata

使用 ListProvider 参数时,此 cmdlet 返回 ProviderMetadata 对象。

备注

Get-WinEvent 旨在替换运行 Windows Vista 和更高版本的 Windows 的计算机上的 Get-EventLog cmdlet。 Get-EventLog 仅在经典事件日志中获取事件。 为实现后向兼容性保留了 Get-EventLog

Get-WinEventGet-EventLog cmdlet 在 Windows 预安装环境 (Windows PE) 中不受支持。