The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何調整 Windows 作業系統的時間正確性 ( 終極指令版 )

「時間」對任何事情來說都是十分重要的事,當然對作業系統來講也不例外,但你可不要想說「時間」是一件很容易的事,其學問可大著呢!今天我就來分享幾個校正 Windows 作業系統時間的小技巧。

校正的方法很多,我只分享幾種:

1. 透過 Windows 內建的校時服務自動校時

在螢幕右下角透過滑鼠雙擊開啟「日期與時間」的內容

在螢幕右下角透過滑鼠雙擊開啟「日期與時間」的內容

然後切換到「網際網路時間」頁籤,預設在單機且沒有網域(Domain)的情況下是設定好的,所以主機都會自己自動校時,其實不需要特別設定。

切換到「網際網路時間」頁籤,預設在單機且沒有網域(Domain)的情況下是設定好的,所以主機都會自己自動校時。

但如果在有網域的情況下,預設網域成員電腦都會自動跟 網域主控站(Domain ControllerDC) 進行校時,所以也不需要特別設定。

但是若是網域主控站自己需要校時呢?就不能用這招了。

2. 透過國家時間與頻率標準實驗室所提供的 NTP 校時軟體進行校時

我想這也是一般人最常用的校時軟體,如果在網域主控站需要臨時校正系統時間時,可以用這套工具幫你校時。

透過國家時間與頻率標準實驗室所提供的 NTP 校時軟體進行校時

但總不能登入網域主控站後永遠不登出吧,難道重開機之後還要自己登入再執行 NTPClock.exe 嗎?這時就可以考慮第三種方法。

3. 使用 w32tm.exe 工具程式搭配批次檔進行時間校正

這部分在 TigerLin 的【[Windows] w32tm 應用:簡單的 Script 讓 Windows 進行時間同步】文章已有詳細說明,在此不多贅述。但在 TigerLin 的文章中並沒有提到採用 w32tm.exe 的限制,因此稍微做點補充:

如果你的電腦沒有加入任何網域,而遠端時間伺服器本機時間差距又超過 54,000 秒時(共 15 小時),就會導致 “電腦並未 resync,因為要求的時間變更太大。”的錯誤:

電腦並未 resync,因為要求的時間變更太大。

這時要透過 w32tm.exe 工具修正系統時間就必須修改機碼才能解決,你可以透過以下指令查詢設定值:

w32tm /dumpreg /subkey:Config

機碼位置在:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

  • MaxNegPhaseCorrection (負差校正) - 若網路時間比本地時間超過這個秒數就不自動校正
  • MaxPosPhaseCorrection (正差校正) - 若網路時間比本地時間超過這個秒數就不自動校正

若要設定成無上限,可以設定成該 DWORD 的最大值 FFFFFFFF (十六進位值) ( 有 8 個 F )

修改完機碼值之後,必須再執行一次以下指令,才能讓新的機碼生校:

w32tm /config /update

最後再執行一次 w32tm /resync 指令即可完成時間校正的動作。備註:預設網域成員電腦的 MaxNegPhaseCorrection 與 MaxPosPhaseCorrection 已經是無上限,因此無須特別修正。

而當我再深入研究後才發現,原來電腦根本不必設定這個校時的批次檔排程,只要機碼設定正確就會自動校時了。首先,我先分享使用 w32tm.exe 工具的注意事項:

  1. 在網路連線透通的情況下,基本上不需要指定 /manualpeerlist 參數,只有在 Firewall 規則設定的特別嚴謹的情況下才需要自行指派 NTP 伺服器位址。
  2. w32tm /config /update 命令是當 Windows Time 伺服器的設定值需要變更時才執行的,並不需要每次都執行。
  3. 手動指派 NTP 伺服器位址時,可以設定不止一組,這樣也許可以增加校時的有效性,當第一台 NTP 校時伺服器掛掉時會自動切換到第二台進行校時。
  4. 選用 NTP 校時伺服器時,建議可以多加利用國家時間與頻率標準實驗室所提供的 NTP 伺服器清單進行設定,網址如右:http://www.stdtime.gov.tw/chinese/Bulletin/NTP%20promo.txt

網域成員電腦不信任網域主控站的時間設定時,可以透過以下指令進行設定:

w32tm /config /update /manualpeerlist:"time.stdtime.gov.tw clock.stdtime.gov.tw tick.stdtime.gov.tw tock.stdtime.gov.tw watch.stdtime.gov.tw,0x1"

這裡神奇的 ,0x1 就是關鍵所在,加上這個設定就可以讓網域成員電腦每小時(預設值)自動校時一次,這是我辛苦看完 Windows Time Service Tools and Settings 的研究成果。原理說明如下:

Windows Time Service Tools and Settings 文件中的 NtpServer 機碼說明有一段非常重要的描述:

NtpServer: There is no default value for this registry entry on domain members. The default value on stand-alone clients and servers is time.microsoft.com,0x1.

單機模式下 (即未加入網域),預設值為 time.microsoft.com,0x1,所以電腦會自動校時,但預設 7 天才會自動校時一次,如果嫌時間太長可以考慮修改 NtpClient 機碼的 SpecialPollInterval 參數。若是加入網域的成員電腦設定之後,預設是 1 個小時自動校時一次。

SpecialPollInterval: This entry specifies the special poll interval in seconds for manual peers. When the SpecialInterval 0x1 flag is enabled, W32Time uses this poll interval instead of a poll interval determine by the operating system. The default value on domain members is 3,600. The default value on stand-alone clients and servers is 604,800.

※ 2009/6/16 更新

相關連結