Build precise queries to find exactly what you need
Press ESC to close
… but has it’s shortcomings.
This is a corrected version (hopefully it doesn’t get garbled):
# ==================================================================== # Check time against DC or specified server through NRPE / w32tm # Author: Mathieu Chateau – LOTP # mail: [email protected] # version 0.1 # corrected and fixes performance data for positive differences by UKA # ====================================================================
# # Require Set-ExecutionPolicy RemoteSigned.. or sign this script with your PKI #
# ============================================================ # # Do not change anything behind that line! # param ( [string]$refTimeServer, [int]$maxWarn = 1, [int]$maxError = 5 )
$output=”” $exitcode=2 $random= if(($refTimeServer -eq $null) -or ($refTimeServer -eq “”) -or ($refTimeServer -eq ” “)) { $refTimeServer=$env:LOGONSERVER -replace (‘\’,””) if(($refTimeServer -match “^$|^ $”) -or ($env:LOGONSERVER -match $refTimeServer)) { if((gwmi win32_computersystem).partofdomain -eq $true) { #Must use select and not .Name directly. If some DC are down, command will be empty with .Name $fromAD=@()
foreach ($entry in ((([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() | % { $_.DomainControllers }))| select Name)) { #if this server is a DC, can’t check time against itself if(! (($env:COMPUTERNAME -match $entry) -or ($entry -match $env:COMPUTERNAME))) { $fromAD += $entry } } if($fromAD.Count -gt 1) { #get a random DC from AD, as no server provided and no logon server could be found $refTimeServer=(Get-Random -InputObject $fromAD).Name } else { #only one DC, defaulting to internet $refTimeServer=”de.pool.ntp.org” } } else { #Workgroup but no server to check time against provided. Defaulting to internet to do something $refTimeServer=”de.pool.ntp.org” } } }
if(($refTimeServer -eq $null) -or ($refTimeServer -eq “”) -or ($refTimeServer -eq ” “)) { #Something bad happened. Should never happen Write-Host “CRITICAL: can’t auto detect logon server to check against. Need to specify manually using refTimeServer argument” exit 2 }
# determine time offset to selected server $temp=w32tm /stripchart /computer:$refTimeServer /period:1 /dataonly /samples:1 # get last line: time, [+-]00.00000 -> replace 00 by 0, replace +0 by + (for performance data) $temp=($temp | select -Last 1) -replace (“.*, “,””) -replace (“+0″,”0”) -replace (“00.”,”0.”) $temp=$temp -replace (“s$”,””)
# default $state = “WARNING”
if ($temp -match “^-?[0-9]+.[0-9]+$”) { $output=$temp+”s – checked against “+$refTimeServer if ([math]::abs($temp) -gt $maxError) { $state=”CRITICAL” $exitcode=2 } elseif ([math]::abs($temp) -gt $maxWarn) { $state=”WARNING” $exitcode=1 } else { $state=”OK” $exitcode=0 } } else { $output=”Error: – used $refTimeServer as time server – output:$temp” $exitcode=2 }
$output=$state+”:”+$output+’|’+”offset=”+$temp+”s”+”;”+$maxWarn+”;”+$maxError+”;” Write-Host $output exit $exitcode
We’ve completely redesigned the world’s largest repository of Nagios plugins and monitoring tools. Join thousands of users sharing monitoring solutions for servers, applications, and everything in between.
Due to our redesign, all existing accounts require a password reset to access your account again.
Ready to explore 6,100+ projects and contribute to the community?
Reset Password Create Account
Happy Monitoring!