事件提供程序是什么
Get-WinEvent 的 -ListProvider 参数用来查询事件提供程序:某个组件会往哪些日志通道写事件、定义了哪些事件 ID 以及各自的含义说明。设计巡检脚本或告警规则之前先跑一遍很有价值,因为不同组件完全可能使用相同的事件 ID,只有把提供程序名称和 ID 组合起来才能唯一定位一条事件。
基本信息
| 适用平台 | Windows PowerShell 5.1 及以上 / PowerShell 7 |
|---|---|
| 查单个 | Get-WinEvent -ListProvider 名称 |
| 查全部 | Get-WinEvent -ListProvider * |
| 关键属性 | Name、LogLinks、Events(含 Id 与 Description) |
| 权限 | 普通用户可查,个别提供程序需管理员 |
典型使用场景
- 写告警规则前确认某个事件 ID 归属哪个组件,避免只按 ID 匹配造成误报
- 确认组件把日志写到哪个通道,后续才能用日志名精准查询
- 把关键提供程序的事件定义导出成表格,作为运维值班手册
- 排查「日志里找不到某类事件」时确认该提供程序是否根本没启用
- 研究内核电源、存储、任务计划等组件定义了哪些事件
- 核对自定义巡检脚本里写的通道名是否正确,避免查错日志白忙一场
常用示例
常用示例
Get-WinEvent -ListProvider Microsoft-Windows-Kernel-Power # 查单个提供程序
(Get-WinEvent -ListProvider Microsoft-Windows-Kernel-Power).Events | Select-Object Id, Description -First 10
Get-WinEvent -ListProvider * | Where-Object Name -like '*Kernel*' # 按名称模糊找
# 导出某组件的全部事件定义,整理成巡检表:
$p = Get-WinEvent -ListProvider Microsoft-Windows-TaskScheduler
$p.Events | Select-Object Id, Version, Description | Export-Csv ts-events.csv -Encoding UTF8输出属性读法
| 属性 | 含义 | 用途 |
|---|---|---|
| Name | 提供程序名称 | 写过滤器时的 ProviderName 值 |
| LogLinks | 该提供程序写入的通道 | 确定用哪个日志名查询 |
| Events.Id | 事件 ID 列表 | 告警规则的主键之一 |
| Events.Description | 事件含义说明 | 整理成运维手册与工单模板 |
写过滤器时推荐用 FilterHashtable 里的 ProviderName 加 Id 组合:不同组件的事件 ID 会重复,只用 Id 过滤会把无关事件一起捞出来。
Description 是随系统语言本地化的文本,脚本里不要拿它当匹配条件;中文系统与英文系统上描述完全不同,稳定做法是匹配 Id 与提供程序名称。整理巡检表时把描述一起抄下来作为备注,值班时更容易判断事件含义。