[預設的時間校時]
winodws 在「控制台」->「日期和時間」->「網際網路時間」->「變更設定」裡面的「與網際網路時間伺服器同步處理」,可以按「立即更新」來校正時間。
但是這邊沒辦法設定多久自動校時一次,而且內建的時間伺服器(例如time.windows.com)如果校正失敗,也沒辦法在這裡手動新增其他時間伺服器。
[新增預設的時間校時伺服器下拉選單內容]
如果要修改上述的時間伺服器下拉選單。
可執行 regedit 編輯系統登錄檔,在 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers] 裡面可以新增修改可用的時間伺服器下拉選單。
[設定多久校時一次:NTPClock、Windows Time(W32Time)]
如果要設定多久自動校時一次,可以下載國家時間與頻率標準實驗室的 NTPClock 校時程式。
或是用系統內建的 Windows Time(W32Time) 服務來設定。
以下介紹 Windows Time(W32Time) 。
[啟動 W32Time]
先使用 w32tm /query /peers 看目前 W32Time 的時間伺服器有哪些,如果顯示服務尚未啟動。則先到「服務」中,將 Windows Time 啟動,並將啟動類型設定為「自動(延遲開始)」(沒設定延遲開始,重開機似乎會無法啟動)。
C:\Windows\system32>w32tm /query /peers 發生下列錯誤: 服務尚未啟動。 (0x80070426)如果有正常啟動,執行 w32tm /query /peers 就可看到目前的時間伺服器設定(這邊的伺服器清單跟「網際網路時間」那邊的下拉清單不同)
C:\Windows\system32>w32tm /query /peers #對等: 1 對等: time.windows.com,0x9 狀態: 擱置中 剩餘時間: 603689.4865209s 模式: 0 (保留) 組織層: 0 (未指定) 對等輪詢間隔: 0 (未指定) 主機輪詢間隔: 0 (未指定)
[修改 W32Time 的校時伺服器清單]
我將時間伺服器修改成使用國家時間與頻率標準實驗室的 Server,多台 Server 用空白間隔。(server 後面有加上「0x1」的話,之後可使用 regedit 編輯系統登錄檔的 SpecialPollInterval 設定,來設定校時的間隔時間。)
C:\Windows\system32>w32tm /config /update /manualpeerlist:"tock.stdtime.gov.tw,0x1 watch.stdtime.gov.tw,0x1" C:\Windows\system32>w32tm /query /peers #對等: 2 對等: tock.stdtime.gov.tw,0x1 狀態: 使用中 剩餘時間: 4.1709780s 模式: 3 (用戶端) 組織層: 2 (次要參照 - 依 (S)NTP 同步處理) 對等輪詢間隔: 10 (1024s) 主機輪詢間隔: 10 (1024s) 對等: watch.stdtime.gov.tw,0x1 狀態: 使用中 剩餘時間: 4.6397280s 模式: 3 (用戶端) 組織層: 2 (次要參照 - 依 (S)NTP 同步處理) 對等輪詢間隔: 10 (1024s) 主機輪詢間隔: 10 (1024s)
[修改 W32Time 教時的時間間隔 ](當 server 有加上「0x1」設定時)
使用 regedit 編輯系統登錄檔,修改 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient] 底下的 SpecialPollInterval 設定值,設定隔多少秒校時一次(似乎要重新啟動系統才會生效)
(預設是604800秒,7天)
[手動執行 w32tm /resync 校時]
手動校時,可執行 w32tm /resync 指令。
C:\Windows\system32>w32tm /resync 正在傳送 resync 命令給本機電腦 命令已經成功完成。
[使用工作排程校時]
如果不想經由修改系統登錄檔,來設定校時的時間間隔。也可選擇使用工作排程器,定時執行 w32tm /resync 指令來校時。
[執行批次檔校時]
或是使用批次檔,每隔一段時間執行一次 w32tm /resync 校時指令
@echo off cd c: c: :aa for /f "tokens=1-4 delims=-/ " %%i IN ("%date%") DO ( set year=%%i set month=%%j set day=%%k ) SET fname=%year%-%month%-%day% SET fname=%fname: =0% REM 將執行結果存放在 c:\my_ntp_log\ SET fname=c:\my_ntp_log\%fname%.txt echo start: %date% %time% >> %fname% w32tm /resync >> %fname% echo end: %date% %time% >> %fname% timeout /t 900 /nobreak goto aa pause
查看跟某台時間伺服器(例如:tock.stdtime.gov.tw)的時間差異,/samples:5 顯示5筆樣本資料,/僅顯示資料,不顯示圖形
w32tm /stripchart /computer:tock.stdtime.gov.tw /samples:5 /dataonly
(其他時間伺服器:w32tm /config /update /manualpeerlist:"tock.stdtime.gov.tw watch.stdtime.gov.tw time.stdtime.gov.tw clock.stdtime.gov.tw tick.stdtime.gov.tw")
參考:
windows time 服务无法启动解决方法:w32tm /register
https://technet.microsoft.com/en-us/library/cc773263.aspx
[Windows] w32tm 應用:簡單的 Script 讓 Windows 進行時間同步
如何調整 Windows 作業系統的時間正確性 ( 終極指令版 )
網域主控站(DC)如何正確設定 Windows 時間服務 (w32tm)
[修改 W32Time 教時的時間間隔 ](當 server 有加上「0x1」設定時)
回覆刪除路徑應該是 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient] 才對哦!
太感謝了,已更正。
刪除你好,
回覆刪除請問在PDC上的校時設定,是否也可以用command設定server 後面有加上「0x1」,之後使用 regedit 編輯系統登錄檔的 SpecialPollInterval 設定,來設定校時的間隔時間?
如下設定可以嗎?
w32tm /config /manualpeerlist:"tock.stdtime.gov.tw,0x1 watch.stdtime.gov.tw,0x1"
/syncfromflags:manual /reliable:yes /update
您好,不好意思,我第一次聽到 PDC,本想測試看看,
刪除但 google PDC 後,才發現我手邊沒這樣的環境,無法測試 Orz
所以只能建議您如果測試後不行,一時也找不到解決方法、或最後發現真的無法設定校時間隔,
或許可考慮用文章後面的批次檔自訂校時間隔,之前我用批次檔校時跑幾年都正常。