使用WQL从WMI查询Win32_NTLogEvent类时,TimeGenerated属性是否基于计算机或GMT的本地时间?
-
28-09-2019 - |
题
我正在编写一个C#Windows服务,该服务正在通过一些域控制器上的事件日志进行一些改动。其中有些是Windows Server 2003,有些是Windows Server2008。服务停止后,我尝试恢复在日志中停下来的位置。为此,而不是
SELECT * FROM Win32_NTLogEvent WHERE --criteria for events I am looking for
我在做
SELECT * FROM Win32_NTLogEvent WHERE TimeGenerated = --some date AND --criteria for events I am looking for
有一次我确信TimeGenerated字段位于服务器的本地时间,但是现在看来Windows 2008 Server使用GMT记录该时间。如果这是两个操作系统的功能之间真正的不同还是这是配置问题,谁能提供一些启发?
解决方案
Windows时间戳始终以UTC记录。它们只会在您用来查看数据的任何GUI程序中转换为本地时间,例如Event Viewer或Explorer(用于文件时间)。此行为对于避免夏令时过渡时的随机故障很重要。
其他提示
此外,似乎在Windows Server 2008之前的版本中,TimeGenerated是在本地时间返回的,但正如其他人所注意到的,在Server 2008中已更改为GMT。
类似的事情可能会有所帮助:
("Select * from Win32_NTLogEvent Where Logfile = 'Application' AND EventCode = '999' AND Message Like '%message%' AND TimeGenerated = '201202210000000000.000000+***'")
TimeGenerated
语法是向后设置的,因此在上面的示例中,需要使用其yearmonthdaytimeminutesseconds.000000+\***
之前的000000+\***
。
希望这会有所帮助。