PowerShell调用Get-WinEvent获取当日Windows事件日期格式报错如何解决
PowerShell Get-WinEvent 日期格式错误解决方案
错误原因
你触发格式错误的核心原因有两点:
- .NET 日期格式符使用错误:代表「天」的格式符是小写
dd,代表「月份」的格式符是大写MM,你使用的DD/MM/YY属于无效格式定义,无法被正确解析。 - 不必要的字符串转换操作:
Get-WinEvent的FilterHashtable参数原生支持DateTime类型的对象作为StartTime、EndTime的取值,不需要手动转为字符串,转字符串反而容易因为系统区域的日期格式规则差异出现兼容性问题。
正确代码(获取当日所有事件)
直接传入DateTime对象即可,不需要做格式转换:
Get-WinEvent -ComputerName myComputer -FilterHashtable @{ StartTime = [datetime]::Today EndTime = [datetime]::Today.AddDays(1).AddTicks(-1) }
上述代码中[datetime]::Today默认取当日零点,AddDays(1).AddTicks(-1)取当日最后一刻,覆盖全天所有时间范围。
若需手动指定日期字符串的写法
如果需要筛选指定日期的事件,建议使用ParseExact方法固定格式避免区域问题,示例如下:
# 示例筛选2024年10月5日的事件 Get-WinEvent -ComputerName myComputer -FilterHashtable @{ StartTime = [datetime]::ParseExact('05/10/2024', 'dd/MM/yyyy', $null) EndTime = [datetime]::ParseExact('05/10/2024', 'dd/MM/yyyy', $null).AddDays(1).AddTicks(-1) }
内容的提问来源于stack exchange,提问作者Foxhunt
相关产品推荐
相关产品推荐

