Полный скрипт

# 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
}