Найти в Дзене
Sam's IT blog

🕔Недавно было необходимо сделать скрипт для проверки Zabbix сервером насколько время на ВМ отклоняется от точного времени

🕔Недавно было необходимо сделать скрипт для проверки Zabbix сервером насколько время на ВМ отклоняется от точного времени. Результатом стал скрипт ниже, который показывает среднее время отклонения от множества источников времени, заданных на сервере Windows через GPO или реестр. param( $ProcessTimeSources = 5 ) $average_drift = 0 $WorkedTimeSources=0 # Get the list of peers and process each one (w32tm /query /peers | Select-String 'Peer:') | Select-Object -First $ProcessTimeSources | ForEach-Object { # Extract the time source address $time_source_address = ([string]$_).TrimEnd(',0x8').TrimStart('Peer: ') # Query the time drift for the current peer try { $stripchart_output = w32tm /stripchart /computer:$time_source_address /dataonly /samples:1 2>&1 if ($stripchart_output -is [System.Management.Automation.ErrorRecord]) { #throw "Error querying time source: $time_source_address" continue } # Parse the time drift value $last_line = ($stripchart_output | Select-Object -Last 1) -replace '\

🕔Недавно было необходимо сделать скрипт для проверки Zabbix сервером насколько время на ВМ отклоняется от точного времени. Результатом стал скрипт ниже, который показывает среднее время отклонения от множества источников времени, заданных на сервере Windows через GPO или реестр.

param(

$ProcessTimeSources = 5

)

$average_drift = 0

$WorkedTimeSources=0

# Get the list of peers and process each one

(w32tm /query /peers | Select-String 'Peer:') | Select-Object -First $ProcessTimeSources | ForEach-Object {

# Extract the time source address

$time_source_address = ([string]$_).TrimEnd(',0x8').TrimStart('Peer: ')

# Query the time drift for the current peer

try {

$stripchart_output = w32tm /stripchart /computer:$time_source_address /dataonly /samples:1 2>&1

if ($stripchart_output -is [System.Management.Automation.ErrorRecord]) {

#throw "Error querying time source: $time_source_address"

continue

}

# Parse the time drift value

$last_line = ($stripchart_output | Select-Object -Last 1) -replace '\s+', ' '

$time_drift_in_ms = [System.Math]::Abs([double]($last_line.Split(',')[1].Trim().TrimEnd('s')))

# Debugging output

#Write-Host "Time Source: $time_source_address, Drift: $time_drift_in_ms ms"

$average_drift+=$time_drift_in_ms

} catch {

#Write-Host "Failed to process time source: $time_source_address. Error: $_"

continue

}

$WorkedTimeSources++

}

# Debugging output

#Write-Host ("Final drift threshold count: "+$average_drift/$WorkedTimeSources)

#Write-Host ("Total drift: "+$average_drift)

return ($average_drift/$WorkedTimeSources)

Список NTP серверов для различных локаций, который показывают максимально точное время.

- Alibaba:

ntp.aliyun.com cn.pool.ntp.org clock.fmt.he.net toc.ntp.telstra.net time.google.com time.facebook.com time.apple.com x.ns.gin.ntt.net time5.cloud.tencent.com

- Asia:

asia.pool.ntp.org time.windows.com time.cloudflare.com toc.ntp.telstra.net time.google.com time.facebook.com time.apple.com x.ns.gin.ntt.net

time5.cloud.tencent.com

- Europe:

europe.pool.ntp.org time.windows.com time.cloudflare.com ntps1-0.cs.tu-berlin.de time.google.com time.facebook.com time.apple.com x.ns.gin.ntt.net time5.cloud.tencent.com

- AWS:

169.254.169.123 pool.ntp.org time.windows.com time.google.com time.facebook.com time.apple.com time5.cloud.tencent.com

#powershell #windows #time #zabbix

@samsitblog