コマンドラインからNTPサーバの設定をする for Windows

Windows で参照する NTP サーバの設定をコマンドラインからおこなう方法。Windows VistaWindows 7 では管理者権限のあるコマンドプロンプトより実行します。

 

C:\> w32tm /config /update /manualpeerlist:ntp.jst.mfeed.ad.jp /syncfromflags:manual

 

こんな感じで設定ができます。設定したものをシステムにすぐに反映したい、再起動した後も自動で同期するように設定したい場合は以下のように。

 

C:\> sc config w32time start= delayed-auto
C:\> net start w32time
C:\> w32tm /resync

 

こんなかんじでしょうか。上から順に、Windows Time サービスを自動起動(遅延)に設定、Windows Time サービスを起動、指定したNTPサーバに同期、です。Windows XP では delayed-auto が使えないので auto にしておきます。

これで内部的にはキチンとNTPサーバが登録され、正常に時刻同期されます。ところが気持ち悪いことに、これだけでは画面表示が変わりません。日付と時刻設定内のインターネット時刻に表示される項目が変わりません。なんなのこれ。

というわけでここの表示も変えます。変えなくて良いんですけど、気になる場合は、レジストリに無理矢理設定します。

 

C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /v 0 /t REG_SZ /d ntp.jst.mfeed.ad.jp /f
C:\> reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers /t REG_SZ /d 0 /f"

 

この辺の処理をまとめて実行する vbs のスクリプト作ってみました。

sample/ntpset.vbs at master · moriyaxreajp/sample · GitHub

こんな感じでどうでしょうか。Vista 以降の場合は、システムの中身を変更する処理を入れてあるので UAC による権限昇格の許可を求める画面が出るようにしてあります。右クリックして管理者として実行、とか面倒な操作なしに昇格しようとします。vbs 内での書き方としては、shell.application の ShellExecute にて runas をつけて実行です。