[玩转系统] 使用 Get-WinEvent PowerShell Cmdlet 的完整指南
作者:精品下载站 日期:2024-12-14 12:35:47 浏览:12 分类:玩电脑
使用 Get-WinEvent PowerShell Cmdlet 的完整指南
Windows 有几种不同的事件日志,但是如何快速检索它们呢? Get-WinEvent
cmdlet 可以检索经典的 Windows 事件日志,例如系统和应用程序日志、Windows 事件日志技术生成的日志,甚至 Windows 事件跟踪 (ETW) 日志!
在本文中,了解如何利用 Get-WinEvent
从事件日志中检索和过滤事件!
先决条件
要继续操作,您只需要当前版本的 Windows 10 和 PowerShell 5.1 及更高版本。本文使用 Windows 10 和 PowerShell 7.1。
使用 Get-WinEvent
列出可用日志
如果不知道所有可用日志,就很难知道您可能需要哪些日志条目。通过 Get-WinEvent
,您可以使用 -ListLog
参数快速列出所有可用日志。 *
参数值告诉 Get-WinEvent
列出所有日志而不进行过滤。如下所示,将检索所有日志,但使用 Select-Object
cmdlet 仅显示一组有限的属性。
Get-WinEvent -ListLog * | Select-Object LogName, RecordCount, IsClassicLog, IsEnabled, LogMode, LogType | Format-Table -AutoSize
并非所有日志都默认启用。您可能需要打开事件查看器,找到日志,然后右键单击以在事件显示之前启用日志。
Windows Vista 之后的所有日志均保存为 *.evtx
文件,而不是较旧的 *.evt
格式。属性 IsClassicLog
说明日志事件是在消息文件 (*.mc
) 格式中定义还是在清单 (*.xml
) 中定义,格式。
一个有趣的属性是 LogMode
,您可能已经注意到它通常设置为 Circular
。
Circular
- 一旦满了就覆盖最旧的日志条目。Retain
- 保留所有事件直至日志已满,并停止记录直至释放。AutoBackup
- 事件日志满后自动备份和存档。
最后,查看 LogType
属性,有几种不同类型的日志。此属性更多地用作分类属性,但它通常通知如何使用日志以及显示的事件类型。
- 管理 - 主要面向最终用户和管理用户。
- 分析 - 通常是大量日志,用于描述程序操作。
- 调试 - 适用于需要深入了解程序内部的开发人员。
- 操作 - 操作期间发生的事件,可用于诊断事件和触发过程。
列出事件日志提供程序
现在您已经对不同的日志及其属性有了深入的了解,这有助于理解什么是事件日志提供程序。在事件日志术语中,提供者是事件的源。
事件日志提供程序是唯一的,并链接到每个日志(例如应用程序或系统日志),并将充当事件发起的指定源。
也许您想在过滤日志时发现问题,并且您可能只对特定提供商的问题感兴趣。要列出可用的提供程序,请使用 -ListProvider
参数。如下所示,*
列出了所有可用的提供程序以及提供程序所链接的日志,例如 Windows PowerShell 或 System。
Get-WinEvent -ListProvider * | Format-Table -Autosize
也许您可能只想列出可用于特定日志的提供程序,例如System
。为此,您可以使用 Where-Object
命令并使用 LogLinks
属性的值来过滤事件。 LogLinks
属性将链接的事件日志显示为列表。
要使用 Where-Object
过滤请求的日志,请使用 -In
比较运算符仅过滤 LogLinks 中具有
System
的事件属性值。最后,使用 Format-Table -AutoSize
可以更轻松地读取输出,如下所示。
Get-WinEvent -ListProvider * | Where-Object { 'System' -In ($_ | Select-Object -ExpandProperty Loglinks | Select-Object -ExpandProperty Logname) } | Format-Table -AutoSize
使用 Get-WinEvent 检索经典事件日志
解决 Windows 问题的第一步是检索应用程序或系统日志,这恰好是经典事件日志。在下面所示的示例中,您将使用应用程序事件日志的 -MaxEvents
参数检索前 100
事件。
为了使读取结果更容易,请仅选择更容易读取条目所需的属性。否则,条目将按提供者名称进行分组,这使得解析结果列表变得困难。
Get-WinEvent -LogName 'Application' -MaxEvents 100 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
使用 Get-WinEvent 查找现代 Windows 事件
现在您已经从经典应用程序日志中检索了事件,那么来自较新的 Windows 事件日志(例如 Microsoft-Windows-WindowsUpdateClient/Operational
)的结果又如何呢?
与经典事件日志(例如 System
)不同,Microsoft-Windows-WindowsUpdateClient/Operational
是一种现代日志,使用 Get-WinEvent
来工作与下面相同。
Get-WinEvent -LogName 'Microsoft-Windows-WindowsUpdateClient/Operational' -MaxEvents 10 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
只获取最旧的事件怎么样?尽管您可以使用 Sort-Object
对结果进行反向排序,但请使用 -Oldest
参数检索前 10
事件,如下所示。
Get-WinEvent
命令为您进行过滤,而不是返回所有结果并进行排序,这通常会比较慢。
Get-WinEvent -LogName 'Microsoft-Windows-WindowsUpdateClient/Operational' -Oldest -MaxEvents 10 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
使用 Get-WinEvent 检索 Windows (ETW) 文件的事件跟踪
也许您有从另一台计算机导出的*.evtx
文件或备份了现有日志。您可以使用 Get-WinEvent
cmdlet 读取这些日志。如果您需要保留日志用于审核目的,Get-WinEvent
是在脚本中使用标准 cmdlet 快速查询这些日志的好方法。
要演示从 *.evtx
文件检索日志条目,您需要一个导出的日志文件。
1. 打开事件查看器并导航至日志。在此示例中,为应用程序和服务日志 → Windows PowerShell 日志。
2. 接下来,单击操作窗格中的将所有事件另存为...菜单项。
3. 将文件保存到可通过 Get-WinEvent
命令检索的磁盘位置。
现在您已经导出了日志文件,通过 -Path
参数传递日志文件位置以读取事件。在下面显示的示例中,导出 Windows PowerShell 日志以供以后使用。
Get-WinEvent -Path 'C:\Articles\WindowsPowerShell.evtx' -MaxEvents 10 | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
使用 Get-WinEvent 过滤 Windows 事件日志
虽然您可以使用标准 Where-Object
cmdlet 过滤日志,但 Get-WinEvent
提供内置过滤器。通过返回所有结果然后进行过滤,会完成比必要的更多的工作。相反,您应该始终尝试尽可能地从源头进行过滤。
Get-WinEvent
cmdlet 提供三个参数来帮助您筛选数千个事件,称为 -FilterHashTable
、-FilterXPath
和 -FilterXML
。每个参数通常以不同的方式执行相同的任务。
使用 FilterHashTable 过滤事件日志
-FilterHashTable
参数根据匹配的属性(例如 LogName
)过滤内容。您可以使用哈希表,例如 @{'LogName'='Application'}
,而不是使用 -LogName
参数按特定日志进行过滤。将对应于 LogName
事件属性。
下面显示的示例为 -FilterHashTable
参数提供了一个哈希表,该参数仅查找应用程序日志,并且开始时间为当天午夜过后的所有事件,Get-WinEvent
快速返回结果。
Get-WinEvent -FilterHashTable @{'LogName' = 'Application'; 'StartTime' = (Get-Date -Hour 0 -Minute 0 -Second 0)} | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
将上述同一命令的过滤速度与通过 Where-Object
而不是通过管道上的 -FilterHashTable
参数过滤的速度进行比较。正如您所看到的,使用 Where-Object
的命令比使用 -FilterHashTable
参数的命令慢得多。
使用 FilterXPath
参数过滤事件日志
事件日志条目存储为 XML 文件,因此您可以使用 XPath 语言(一种 XML 查询语言)来过滤日志条目。执行上面使用的相同命令并转换为 XPath,您可以获得相同的结果。
要制作 XPath 查询,请使用 Windows 事件查看器中的过滤功能,如下所示。
1. 打开事件查看器并导航至日志,例如Windows 日志 → 应用程序日志。
2. 接下来,单击右侧窗格中的“过滤当前日志”链接。
3. 输入要用于过滤日志的参数。
4. 单击 XML 选项卡并复制 Select 标记中包含的部分。
5. 现在,使用 -FilterXPath
参数复制并粘贴复制的内容。您现在可以在下面看到,使用从事件日志查看器找到的 XPath 语法,您可以构建一个查询来仅过滤必要的信息。
Get-WinEvent -LogName 'Application' -FilterXPath "*[System[(Level=1 or Level=3)]]" | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
深入探讨如何制作 XPath 查询超出了本文的范围,但基本格式如下所示。当 FilterXPath
参数过滤日期时,您会看到一个很大的区别:您需要使用更具体的日期格式,yyyy-MM-ddTHH:mm:ss.fffZ
,日期必须以 UTC 格式返回,由 -AsUTC
开关注明。
Get-WinEvent -LogName 'Application' -FilterXPath "*[System[TimeCreated[@SystemTime >= '$(Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 -Format "yyyy-MM-ddTHH:mm:ss.fffZ" -AsUTC)']]]" | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
使用 FilterXML
过滤事件日志结果
最后,最后一个可用的过滤参数是-FilterXML
参数。与 -FilterXPath
和 -FilterHashTable
参数不同,此参数采用 XML,然后用于过滤事件。 -FilterXML
参数允许更复杂的规则,如下所示,可以复制前面的过滤示例。
如上例所示,您可以通过事件查看器 → 筛选当前日志功能检索预先格式化的查询。您将使用整个查询,而不是仅选择 Select
节点中的内容。没有选择实际的过滤器,如 Select
节点中的 *
所示。这将为下一个示例提供通用标记。
首先,不要创建单行命令,而是将 XML 查询分开并将标记分配给变量 $Query
,如下例所示。将查询分配给变量可以提高易用性和可读性。接下来,将 $Query
变量传递给 Get-WinEvent
的 -FilterXML
参数。
如下所示,您会看到更复杂的查询的结果,该查询返回当天的所有事件并存储在 Application
日志中。
$Query = "<QueryList>
<Query Id='0' Path='Application'>
<Select Path='Application'>*[System[TimeCreated[@SystemTime >= '$(Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0 -Format "yyyy-MM-ddTHH:mm:ss.fffZ" -AsUTC)']]]</Select>
</Query>
</QueryList>"
Get-WinEvent -FilterXML $Query | Select-Object TimeCreated, ID, ProviderName, LevelDisplayName, Message | Format-Table -AutoSize
结论
Get-WinEvent
cmdlet 具有强大的过滤功能,可以轻松查询多个事件日志源。从审核到解决问题,Get-WinEvent
cmdlet 是任何系统管理员工具包的重要补充!
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag