如何使用Get-WinEvent查询指定时段全量日志的错误事件
Get-WinEvent 全范围错误级别事件检索方案
问题原因
Get-WinEvent 的 -FilterHashtable 参数依赖Windows事件日志原生查询接口实现筛选,该接口存在明确限制:不支持同时将LogName和ProviderName两个筛选键都设置为全通配符*。此时接口无法构建有效的查询索引,会直接返回空结果集,就是双通配符写法无返回结果的根本原因。
正确实现方法
检索指定时间范围内所有日志、所有提供程序的错误级别事件时,不需要同时给两个参数设置通配符:不指定ProviderName筛选键时,查询默认就会匹配所有事件提供程序,直接省略冗余的ProviderName="*"配置即可。
可用命令参考:
# 建议以管理员身份运行PowerShell,否则会因权限不足无法访问部分系统/安全日志,导致结果不全 Get-WinEvent -FilterHashtable @{ LogName = "*" StartTime = "04.01.2022" EndTime = "05.31.2022" Level = 2 # Level值对应事件级别:2=错误,3=警告,4=信息 } -ErrorAction SilentlyContinue
补充说明
- 命令默认从最新事件向前回溯扫描,查询时间跨度大、系统日志总量高时会有等待时间,属于正常现象
-ErrorAction SilentlyContinue参数会自动跳过无权限访问、无匹配事件的日志条目,避免命令执行中途被非关键报错打断- 如果需要更精准的时间匹配,建议给
StartTime和EndTime传入明确的DateTime类型对象,避免系统区域日期格式差异导致筛选范围偏移,示例写法:$start = Get-Date "2022-04-01 00:00:00" $end = Get-Date "2022-05-31 23:59:59" Get-WinEvent -FilterHashtable @{ LogName = "*" StartTime = $start EndTime = $end Level = 2 } -ErrorAction SilentlyContinue
内容的提问来源于stack exchange,提问作者Purclot
相关产品推荐
相关产品推荐

