ネットワーク経由で他端末の時刻を確認する

今日、端末の時刻がずれていることに起因する問題があって、それを調査する時にこのバッチファイルを作りました。

@ECHO OFF

SET TIMELOG="%~dp0Time.log"
SET WRKFILE=netvw.tmp

IF EXIST %WRKFILE% (
   DEL %WRKFILE%
)

:// 端末名の一覧を作成
net view | FIND /I "\\" > %WRKFILE%

ECHO ○ 処理開始[%DATE%_%TIME%] > %TIMELOG%
ECHO. >> %TIMELOG%

FOR /F "tokens=1,2* delims= " %%i IN (%WRKFILE%) do (
  CALL :GETTIMEINFO %%i
)

IF EXIST %WRKFILE% (
   DEL %WRKFILE%
)

EXIT

:GETTIMEINFO
NET TIME /Y %1 | FIND /I "\\" >> %TIMELOG%

使用しているのはnet viewコマンドとnet timeコマンドです。


net viewコマンドはActiveDirectory環境とWORKGROUP環境では動作が変わります。
ActiveDirectory環境の場合はドメイン内にある端末の一覧を返却しますが、WORKGROUP環境の場合はWORKGROUPで動作している端末の一覧を返却します。


net timeコマンドは引数によって挙動が変わりますが、基本的には自身 or 指定先の端末の時刻を取得するためのコマンドです。アクセス権次第ですが、自身の端末であれば時刻をすぐ同期させたり、同期するサーバを指定することも可能です。今回は時刻の取得に使用しています。


主な使用途としては、時刻がずれてる端末がないかどうかを確認する目的で使います。
本来同一ドメインに参加している端末同士であれば時刻がずれることはないはずなのですが、なぜかこれがずれてしまうことがあるから困ります。プログラムによっては時刻が大きな意味を持つものもありますので、たかが時計とあなどってはいけません。


ちなみに実行するとバッチファイルと同じフォルダに「Time.log」というファイルが作成されます。
これを開くとこんな感じで情報が記録されています。