PowerShell中UTC时间转EST时间的实现方法
把PowerShell事件日志UTC时间转换为EST时区的解决方案
没问题,我来帮你搞定这个时区转换的事儿。我们可以直接利用.NET的TimeZoneInfo类来完成UTC到EST的转换,它还能自动处理夏令时(也就是EDT的切换),不用你手动区分。
修改你现有代码里的TimeCreated字段赋值逻辑就行,调整后的完整代码如下:
$Windowsevnts += New-Object -TypeName PSObject -Property @{ RDGServerName = $env:computername UserName = $event.Properties[0].Value IpAddress = [net.ipaddress]$event.Properties[1].Value Resource = $Event.Properties[3].Value # 核心修改:UTC转EST/EDT的逻辑 TimeCreated = [TimeZoneInfo]::ConvertTimeFromUtc( $event.TimeCreated.ToUniversalTime(), [TimeZoneInfo]::FindSystemTimeZoneById("Eastern Standard Time") ) Result = $eventtype }
简单解释下关键部分:
[TimeZoneInfo]::FindSystemTimeZoneById("Eastern Standard Time"):这行是获取美国东部时区的系统对象,这个ID是Windows内置的标准标识,会自动识别夏令时,当进入夏令时段时会自动切换为EDT。$event.TimeCreated.ToUniversalTime():这一步是保险操作,确保我们的原始时间是UTC格式——哪怕原时间已经是UTC,这个方法也不会出错,避免因为时间格式不明确导致转换失败。[TimeZoneInfo]::ConvertTimeFromUtc():这是实际执行转换的方法,把UTC时间转成目标时区的本地时间。
如果你能确定$event.TimeCreated的Kind属性已经明确标记为Utc,那可以把$event.TimeCreated.ToUniversalTime()简化成$event.TimeCreated,效果完全一致。
内容的提问来源于stack exchange,提问作者user8172425
相关产品推荐
相关产品推荐

