PowerShell Get-WinEvent EndTime参数异常:添加后无事件返回
Get-WinEvent 添加 EndTime 后返回“未找到事件”的问题排查
执行以下命令可正常返回应用日志事件:
Get-WinEvent -FilterHashtable @{logname="application";starttime="8/10/2022 10:00:00"}
但添加EndTime参数后,明明目标时间范围内存在事件记录,却返回“未找到事件”提示:
Get-WinEvent -FilterHashtable @{logname="application";starttime="8/10/2022 10:00:00";EndTime="8/11/2022 10:00:00"}
问题根源
- 日期格式的区域性解析错误:这是核心原因。
Get-WinEvent的FilterHashtable在解析字符串格式的日期时,会遵循当前系统的区域设置。如果你的系统区域不是美式日期格式(MM/DD/YYYY),像"8/11/2022"这样的写法会被错误解析——比如中文区域(DD/MM/YYYY)下,它会被识别为11月8日,而非预期的8月11日,导致时间范围完全偏离,自然找不到对应事件。 - EndTime 的排他性过滤逻辑:
EndTime的过滤规则是不包含指定时间点的事件,如果你的事件恰好触发于8/11/2022 10:00:00这个时间点,也会被排除,但这通常不是主要问题。
解决方法
方法1:使用ISO标准日期格式(推荐)
采用YYYY-MM-DD HH:mm:ss的格式,这种格式不受系统区域设置影响,解析准确率100%:
Get-WinEvent -FilterHashtable @{logname="application";starttime="2022-08-10 10:00:00";EndTime="2022-08-11 10:00:00"}
方法2:显式转换为DateTime对象
通过[DateTime]::ParseExact指定日期格式,强制按预期解析,避免区域干扰:
$startTime = [DateTime]::ParseExact("8/10/2022 10:00:00", "M/d/yyyy HH:mm:ss", $null) $endTime = [DateTime]::ParseExact("8/11/2022 10:00:00", "M/d/yyyy HH:mm:ss", $null) Get-WinEvent -FilterHashtable @{logname="application";starttime=$startTime;EndTime=$endTime}
方法3:匹配系统区域的日期格式
如果坚持使用短日期格式,需严格遵循当前系统区域的日期格式规则(比如中文区域用"10/8/2022"表示8月10日),但这种方法兼容性差,更换设备或修改区域设置后容易失效,不推荐。
内容的提问来源于stack exchange,提问作者Purclot
相关产品推荐
相关产品推荐

