「時間」對任何事情來說都是十分重要的事,當然對作業系統來講也不例外,但你可不要想說「時間」是一件很容易的事,其學問可大著呢!今天我就來分享幾個校正 Windows 作業系統時間的小技巧。
校正的方法很多,我只分享幾種:
1. 透過 Windows 內建的校時服務自動校時
在螢幕右下角透過滑鼠雙擊開啟「日期與時間」的內容
然後切換到「網際網路時間」頁籤,預設在單機且沒有網域(Domain)的情況下是設定好的,所以主機都會自己自動校時,其實不需要特別設定。
但如果在有網域的情況下,預設網域成員電腦都會自動跟 網域主控站(Domain Controller;DC) 進行校時,所以也不需要特別設定。
但是若是網域主控站自己需要校時呢?就不能用這招了。
2. 透過國家時間與頻率標準實驗室所提供的 NTP 校時軟體進行校時
我想這也是一般人最常用的校時軟體,如果在網域主控站需要臨時校正系統時間時,可以用這套工具幫你校時。
但總不能登入網域主控站後永遠不登出吧,難道重開機之後還要自己登入再執行 NTPClock.exe 嗎?這時就可以考慮第三種方法。
3. 使用 w32tm.exe 工具程式搭配批次檔進行時間校正
這部分在 TigerLin 的【[Windows] w32tm 應用:簡單的 Script 讓 Windows 進行時間同步】文章已有詳細說明,在此不多贅述。但在 TigerLin 的文章中並沒有提到採用 w32tm.exe 的限制,因此稍微做點補充:
如果你的電腦沒有加入任何網域,而遠端時間伺服器與本機的時間差距又超過 54,000 秒時(共 15 小時),就會導致 “電腦並未 resync,因為要求的時間變更太大。”的錯誤:
這時要透過 w32tm.exe 工具修正系統時間就必須修改機碼才能解決,你可以透過以下指令查詢設定值:
機碼位置在:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
- MaxNegPhaseCorrection (負差校正) - 若網路時間比本地時間慢超過這個秒數就不自動校正
- MaxPosPhaseCorrection (正差校正) - 若網路時間比本地時間快超過這個秒數就不自動校正
若要設定成無上限,可以設定成該 DWORD 的最大值 FFFFFFFF (十六進位值) ( 有 8 個 F )
修改完機碼值之後,必須再執行一次以下指令,才能讓新的機碼生校:
最後再執行一次 w32tm /resync 指令即可完成時間校正的動作。備註:預設網域成員電腦的 MaxNegPhaseCorrection 與 MaxPosPhaseCorrection 已經是無上限,因此無須特別修正。
而當我再深入研究後才發現,原來電腦根本不必設定這個校時的批次檔排程,只要機碼設定正確就會自動校時了。首先,我先分享使用 w32tm.exe 工具的注意事項:
- 在網路連線透通的情況下,基本上不需要指定 /manualpeerlist 參數,只有在 Firewall 規則設定的特別嚴謹的情況下才需要自行指派 NTP 伺服器位址。
- w32tm /config /update 命令是當 Windows Time 伺服器的設定值需要變更時才執行的,並不需要每次都執行。
- 手動指派 NTP 伺服器位址時,可以設定不止一組,這樣也許可以增加校時的有效性,當第一台 NTP 校時伺服器掛掉時會自動切換到第二台進行校時。
- 選用 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 機碼說明有一段非常重要的描述:
在單機模式下 (即未加入網域),預設值為 time.microsoft.com,0x1,所以電腦會自動校時,但預設 7 天才會自動校時一次,如果嫌時間太長可以考慮修改 NtpClient 機碼的 SpecialPollInterval 參數。若是加入網域的成員電腦設定之後,預設是 1 個小時自動校時一次。
※ 2009/6/16 更新
相關連結