Полный скрипт
# Save as: Update-NTP-Russian.ps1
Write-Host "=== ОБНОВЛЕНИЕ NTP СЕРВЕРА НА ВНИИФТРИ ===" -ForegroundColor Green
# Проверка прав
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsPrincipal] "Administrator")) {
Write-Host "Требуются права Администратора!" -ForegroundColor Red
exit 1
}
Write-Host "`n1. Текущая конфигурация:" -ForegroundColor Yellow
w32tm /query /source
Write-Host "`n2. Проверка доступности серверов ВНИИФТРИ..." -ForegroundColor Yellow
$servers = @("ntp1.vniiftri.ru", "ntp2.vniiftri.ru", "ntp3.vniiftri.ru", "ntp4.vniiftri.ru")
foreach ($server in $servers) {
$test = Test-NetConnection -ComputerName $server -Port 123 -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
if ($test.TcpTestSucceeded -or $test.PingSucceeded) {
Write-Host " ✓ $server доступен" -ForegroundColor Green
} else {
Write-Host " ✗ $server недоступен" -ForegroundColor Red
}
}
Write-Host "`n3. Остановка службы времени..." -ForegroundColor Yellow
try {
Stop-Service w32time -Force -ErrorAction Stop
Write-Host " Служба остановлена" -ForegroundColor Green
} catch {
Write-Host " Ошибка остановки службы: $_" -ForegroundColor Red
exit 1
}
Write-Host "`n4. Настройка новых NTP серверов..." -ForegroundColor Yellow
$ntpServers = "ntp1.vniiftri.ru,0x8 ntp2.vniiftri.ru,0x8 ntp3.vniiftri.ru,0x8 ntp4.vniiftri.ru,0x8"
$configCmd = "w32tm /config /manualpeerlist:`"$ntpServers`" /syncfromflags:manual /reliable:yes /update"
Invoke-Expression $configCmd
if ($LASTEXITCODE -eq 0) {
Write-Host " Конфигурация обновлена" -ForegroundColor Green
} else {
Write-Host " Ошибка обновления конфигурации" -ForegroundColor Red
}
Write-Host "`n5. Запуск службы времени..." -ForegroundColor Yellow
try {
Start-Service w32time -ErrorAction Stop
Write-Host " Служба запущена" -ForegroundColor Green
} catch {
Write-Host " Ошибка запуска службы: $_" -ForegroundColor Red
}
Write-Host "`n6. Принудительная синхронизация..." -ForegroundColor Yellow
w32tm /resync /force
Write-Host "`n7. Проверка результатов:" -ForegroundColor Yellow
Start-Sleep -Seconds 2
w32tm /query /source
w32tm /query /status | Select-String "Source", "Stratum", "Last Successful Sync"
Write-Host "`n=== ГОТОВО ===" -ForegroundColor Green
Write-Host "NTP сервер обновлен на серверы ВНИИФТРИ" -ForegroundColor Green
# Текущий источник времени
w32tm /query /source
# Статус службы времени
w32tm /query /status
# Проверить доступность новых серверов
Test-NetConnection -ComputerName ntp1.vniiftri.ru -Port 123
Test-NetConnection -ComputerName ntp2.vniiftri.ru -Port 123
Stop-Service w32time -Force
# Основная команда настройки
w32tm /config /manualpeerlist:"ntp1.vniiftri.ru,0x8 ntp2.vniiftri.ru,0x8" /syncfromflags:manual /reliable:yes /update
# Альтернативный вариант с большим количеством серверов
w32tm /config /manualpeerlist:"ntp1.vniiftri.ru,0x8 ntp2.vniiftri.ru,0x8 ntp3.vniiftri.ru,0x8 ntp4.vniiftri.ru,0x8" /syncfromflags:manual /reliable:yes /update
# Запуск службы
Start-Service w32time
# или
net start w32time
# Принудительная синхронизация
w32tm /resync /force
Проверить синхронизацию
# Скрипт для проверки корректности синхронизации
function Test-NTP-Sync {
$status = w32tm /query /status
$source = ($status | Select-String "Source:").ToString().Split(":")[1].Trim()
$stratum = ($status | Select-String "Stratum:").ToString().Split(":")[1].Trim()
Write-Host "Текущий источник: $source" -ForegroundColor Cyan
Write-Host "Stratum: $stratum" -ForegroundColor Cyan
if ($source -match "vniiftri") {
Write-Host "✓ Синхронизация с ВНИИФТРИ настроена" -ForegroundColor Green
} else {
Write-Host "✗ Источник не ВНИИФТРИ" -ForegroundColor Red
}
if ([int]$stratum -le 5) {
Write-Host "✓ Качество синхронизации хорошее" -ForegroundColor Green
} else {
Write-Host "⚠ Качество синхронизации может быть низким" -ForegroundColor Yellow
}
}
# Запустить проверку
Test-NTP-Sync
Добавить в планировщик для регулярной проверки
# Создать задачу для проверки синхронизации
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-Command `"w32tm /resync /force`""
$trigger = New-ScheduledTaskTrigger -Daily -At 3:00AM
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
Register-ScheduledTask -TaskName "NTP Resync Daily" -Action $action -Trigger $trigger -Principal $principal -Description "Ежедневная синхронизация времени с ВНИИФТРИ"
Для контроллера домена (PDC эмитент)
# Если сервер является контроллером домена
# Настройка PDC эмитента как надежного источника
# 1. Определить PDC эмитент
$pdc = (Get-ADDomainController -Discover -Service PrimaryDC).Name
# 2. Если это текущий сервер - настраиваем
if ($env:COMPUTERNAME -eq $pdc) {
Write-Host "Настраиваю PDC эмитент..." -ForegroundColor Cyan
# Остановить службу
Stop-Service w32time -Force
# Настроить внешние серверы
w32tm /config /manualpeerlist:"ntp1.vniiftri.ru,0x8 ntp2.vniiftri.ru,0x8" /syncfromflags:manual /reliable:yes /update
# Запустить службу
Start-Service w32time
# Проверить
w32tm /query /source
w32tm /resync /force
} else {
Write-Host "Это не PDC эмитент. PDC: $pdc" -ForegroundColor Yellow
}