2010-06-17 125 views
0

我正在編寫一個C#windows服務,通過幾個域控制器上的eventlog進行一些攪動。其中一些是Windows Server 2003,一些是Windows Server 2008.服務停止後,我試圖恢復從日誌中停止的地方。爲了做而不是使用WQL從WMI查詢Win32_NTLogEvent類是基於計算機本地時間或GMT的TimeGenerated屬性?

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服務器使用GMT來記錄那段時間。任何人都可以點亮一下,如果這是兩個操作系統的功能之間真正的不同,或者這是一個配置問題?

回答

0

Windows時間戳記始終以UTC記錄。它們只會在您用來查看數據的任何GUI程序(如事件查看器或資源管理器(文件時間))中轉換爲本地時間。此行爲對於避免夏令時轉換中的隨機故障很重要。

1

此外,在Windows Server 2008之前的版本中,TimeGenerated在本地時間內返回,但在其他版本中已注意到,在Server 2008中更改爲GMT。

+0

在我發佈問題之前,我已經看到了上述鏈接,他們讓我尋找似乎並不存在的問題。我剛剛查詢了我的2003服務器,它和我的2008服務器一樣返回了GMT。我並不是說它從未返回本地時間,但我的2003 sp2服務器當前正在返回GMT。感謝您的回答,但事實證明我有一個我追逐的問題。 – jpmcclung 2010-06-18 21:10:52

0

像這樣可能會有所幫助:

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

TimeGenerated語法是設置向後所以在上述例子中其yearmonthdaytimeminutesseconds.000000+\***需要前面的000000+\***

希望這會有所幫助。

+1

你的簽名已經在這篇文章的底部;) – daramarak 2012-02-21 13:10:56