Home >
Windows にまつわる e.t.c.
Windows Time サービス動作確認
Windows OS は、Windows Time サービス(w32time)で時刻同期をしており、ドメイン環境では
w32time は常時稼働しています。
ワークグループ環境ではデフォルト w32time はトリガー開始ですが、Windows Server
の場合は常時稼働に設定変更しているケースが大半でしょう。
たまに時刻同期が狂ってしまう事があるので、w32timeが期待動作しているのかを PowerShell
でチェックする関数を作りました。
(時刻差異は ntp.nict.jp との比較しています)
【注意】 w32tm の出力結果文字列でチェックしているので、日本語環境でのみ動作します。
確認対象台数が少なければ、このまま貼り付けて確認すれば良いです。
確認対象が多ければ、Invoke-Command
で投入すると良いでしょう(こいつ目的で作ったものを汎用化しました)
こんな感じに確認できます
PS C:\> $HostName = hostname PS C:\> CheckW32time $HostName
w81Entx64-main : NTP Interval Min : 17.0666666666667 ( 10 ) Max :
546.133333333333 ( 15 ) w81Entx64-main : 参照NTP -------- dc01.vwnet.jp
w81Entx64-main : 同期経過 -------- OK(3.58939163833333) w81Entx64-main :
時刻差異 -------- OK(+0.0148508s) |
関数そのものと手動投入はこちら
# w32time 動作確認
function CheckW32time(){
$HostName = hostname
# w32tm が動いてなかったらチェックしない
if((Get-Service w32time).Status -ne "Running"){
echo "$HostName : Windows Time Service is not running."
return
}
# 最少/最大同期インターバル(分)
$RegKey = "MaxPollInterval"
$RegPath = "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\Config"
$Result = Get-ItemProperty $RegPath -name $RegKey -ErrorAction SilentlyContinue
$MaxICount = $Result.$RegKey
$MaxInterval = ([Math]::Pow(2,$MaxICount))/60
$RegKey = "MinPollInterval"
$Result = Get-ItemProperty $RegPath -name $RegKey -ErrorAction SilentlyContinue
$MinCount = $Result.$RegKey
$MinPollInterval = ([Math]::Pow(2,$MinCount))/60
echo "$HostName : NTP Interval Min : $MinPollInterval ( $MinCount ) Max : $MaxInterval ( $MaxICount )"
$Status = w32tm /query /status
$Return = $Status | Select-String "ソース: "
$Parts = @(-split $Return)
$NTP_Server = $Parts[1]
echo "$HostName : 参照NTP -------- $NTP_Server"
$Return = $Status | Select-String "最終正常同期時刻: "
$Parts = @(-split $Return)
$LastSyncTime = $Parts[1] + " " + $Parts[2]
$ElapsedTime = (New-TimeSpan $LastSyncTime).TotalMinutes
if( $ElapsedTime -lt $MaxInterval ){
echo "$HostName : 同期経過 -------- OK($ElapsedTime)"
}
else{
echo "$HostName : 同期経過 ○●○● NG($ElapsedTime)"
}
$Status = w32tm /monitor /computers:ntp.nict.jp
$Return = $Status | Select-String " NTP:"
$Parts = @(-split $Return)
$DiffTimeString = $Parts[1]
$DiffTimeNum = [decimal]$DiffTimeString.Substring(1,$DiffTimeString.Length-2)
if( $DiffTimeNum -lt 2 ){
echo "$HostName : 時刻差異 -------- OK($DiffTimeString)"
}
else{
echo "$HostName : 時刻差異 ○●○● NG($DiffTimeString)"
}
}
# 手動投入
CheckW32time
|
関連情報
ドメインの時刻をNICTのNTPと同期させる
リモート コンピューターのバッチ操作(Invoke-Command)
リモート コンピューターのパラレル バッチ操作(Invoke-Command -AsJob)
Windows OSにおける時刻同期サービスとNTP (@IT)
http://www.atmarkit.co.jp/ait/articles/0508/12/news089.html
Copyright © MURA
All rights reserved.