使用WQL从WMI查询Win32_NTLogEvent类时,TimeGenerated属性是否基于计算机或GMT的本地时间?

StackOverflow https://stackoverflow.com/questions/3063289

  •  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(用于文件时间)。此行为对于避免夏令时过渡时的随机故障很重要。

其他提示

类似的事情可能会有所帮助:

("Select * from Win32_NTLogEvent Where Logfile = 'Application' AND EventCode = '999' AND Message Like '%message%' AND TimeGenerated = '201202210000000000.000000+***'")

TimeGenerated语法是向后设置的,因此在上面的示例中,需要使用其yearmonthdaytimeminutesseconds.000000+\***之前的000000+\***

希望这会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top