get-winevent 的 -filterhashtable 会让事件日志服务先按时间、日志和事件 id 筛选,比先读取全部事件再用 where-object 更高效。starttime 与 endtime 必须是 datetime 对象;时间按本机时区解释,跨机器查询时要先确认时区和系统时间。
先确认日志和时间字段
打开 PowerShell,先用 Get-WinEvent -LogName System -MaxEvents 20 | Select-Object TimeCreated,Id,Message 确认日志可读取,并观察 TimeCreated 的本机日期格式。随后设置 $start=(Get-Date).AddHours(-2) 和 $end=Get-Date;查询其他电脑前还要核对两边时区和系统时间。

用哈希表同时筛选时间和 ID
运行 Get-WinEvent -FilterHashtable @{LogName='System'; Id=41,6008; StartTime=$start; EndTime=$end}。LogName、Id、StartTime 和 EndTime 可组合使用;如果没有结果,先去掉 Id 验证时间范围,再核对事件实际属于哪个日志。

整理输出并避免截断
把结果接到 Select-Object TimeCreated,Id,ProviderName,LevelDisplayName,Message,需要完整查看单条消息时再用 Format-List *。导出前可用 Export-Csv -NoTypeInformation -Encoding UTF8;日志可能含用户名、路径或网络地址,对外发送前先脱敏。


















