Home Directory Plugins Network Protocols NTP and Time Check Windows Time Offset (check_windows_time.bat)

Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com


Remember Me

Directory Tree

Check Windows Time Offset (check_windows_time.bat)

10 votes
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
This plugin will check a windows system against a specified time source. Meant to be used via check_nrpe.

To make installation simple it is just a .bat file that is basically a glorified nagios wrapper for w32tm. Tested on Windows 2k3/2k8/2k8r2. While a bit raw, it does return some common errors (i.e. - server not found)

A windows domain controller can used as a time source as well as a other NTP servers.
To get the plugin going, copy the check_windows_time.bat file to your nagios client /scripts folder on the Windows machine and define the script in your nsc.ini. Don't forget to enable command arguments if you wish to pass the ntp source and other arguments from check_nrpe.

check_windows_time.bat - Nagios plugin that checks time offset against a specified ntp server.

Usage: check_windows_time.bat timeserver warning critical
* warning and critical in seconds

C:>check_windows_time.bat pool.ntp.org 180 300
OK: Time is -01.0821202s from pool.ntp.org|'Offset'=01s;180;300;0

$ /usr/local/nagios/libexec/check_nrpe -H my-server.domain.local -c check_windows_time -a pool.ntp.org 180 300
OK: Time is +00.0120138s from pool.ntp.org|'Offset'=00s;180;300;0
Reviews (8)
Hi all,

This script works great but i can not see check_time on nagios server when i open the gui, i should be able to see it as listed services. I can only see modules like checkdisk, currentload, check, checkservice, checkprocess etc these are all listed under modules and set to 1 in nsclient.ini file. Any ideas?

Thanks in advance.
To allow arguments from Windows, add this section above the definition in nsclient.ini:

[/settings/external scripts]
allow arguments = 1
bydknigh, March 25, 2015
1 of 1 people found this review helpful
I am a Noob and here is my instructions for getting it to work.

This will hard code the arguments ( I am still trying to figure out why I get errors passing arguments )

Tested on NSClient++

on client machine
1. Open
C:\Program Files\NSClient++\nsclient.ini

add to the bottom:

[/settings/external scripts/wrapped scripts]

; check_windows_time -
check_windows_time = check_windows_time.bat pool.ntp.org 30 10

2. Copy check_windows_time.bat to
C:\Program Files\NSClient++\scripts

3. Restart NSClient++ service

4. open command prompt
Navigate to script folder
Check with this command(check_windows_time.bat pool.ntp.org 30 10)

C:\Program Files\NSClient++\scripts>check_windows_time.bat pool.ntp.org 30 10

You should see

C:\Program Files\NSClient++\scripts>check_windows_time.bat pool.ntp.org 30 10
OK: Time is -00.0274625s from pool.ntp.org|'Offset'=00s;30;10;0

On Nagios server

1. Go to Nagios server and setup the check without arguments ( they are hard coded in the nsclient.ini file on client machine ).

$USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -c check_windows_time

To test from nagios server in Putty

cd /usr/local/nagios/libexec
./check_nrpe -H YOUR_SERVER_TO_CHECK -c check_windows_time

You should see

OK: Time is -00.1961396s from ralpdc01|'Offset'=0s;30;10;0

I hope this helps

If anyone has the Noob steps to allow arguments to be passed from Nagios server to client that could be added to this it would be great if you shared it.

byfmdupre, October 28, 2014
I made the following change to no longer be rounding the numbers a point lower to 1.
Do not round numbers

for /f "tokens=*" %%t in ('w32tm /stripchart /computer:%time_server% /samples:1 /dataonly') do set output=%%t

if not "x%output:0x80072af9=%"=="x%output%" goto host_error
if not "x%output:0x800705B4=%"=="x%output%" goto comm_error
if not "x%output:error=%"=="x%output%" goto unknown_error
if not "x%output:)=%"=="x%output%" goto unknown_error

set time_org=%output:*, =%
set time=%time_org%
rem set time=%time_org:~1,-9%
byfelawx, October 22, 2014
Thank you, worked perfectly!
Excellent ! Add check windows version, tested ont w2k, w2003, 2008, 7 (not in xp)

for /f "tokens=2 delims=[]" %%x in ('ver') do set cmdver=%%x
set cmdver=%cmdver:Version =%
for /f "tokens=1,2,3* delims=." %%g in ("%cmdver%") do (
set major=%%g
set minor=%%h
set build=%%i

rem Windows 3.1,95,95 OSR2,NT 4.0,98,98 SE,ME
IF %major% LEQ 4 goto ver_false
rem Windows 2000
echo %cmdver% | FINDSTR /C:"5.0" > nul
IF %ERRORLEVEL% EQU 0 goto ver_false

echo UNKNOWN: OS Version not supported [%cmdver%]
exit /b 3

heklp source : http://ss64.org/viewtopic.php?pid=3151#p3151
bypestigarribia, November 7, 2012
This was very useful, only one note that I have to do:
I have to enable:
; Script to check external scripts and/or internal aliases.
bystaso, September 27, 2012
Works for me ! Thanks !