Skip to content

About

Portable NTP server/client manager for the Windows Time service (w32time) - Windows 7 / Server 2008 R2 and newer up to Windows 11 / Server 2025. Портативная утилита управления службой времени Windows: NTP-сервер для локальной сети и NTP-клиент для сервера GPS (Windows 7 / Server 2008 R2 и новее).

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

NtpManager 1.5

Портативная утилита мониторинга и управления службой времени Windows (w32time): NTP-сервер для локальной сети + NTP-клиент, берущий время у сервера GPS.

PowerShell 2.0+ Windows 7+ / Server 2008 R2+ Установка не требуется Лицензия MIT Проверка синтаксиса

Русский · English


Содержание

Что это

Служба времени Windows (w32time) умеет одновременно раздавать время клиентам локальной сети и получать время от внешнего источника. На практике настроить это без домена, интернета и сторонних программ неудобно: параметры разбросаны по реестру, состояние нигде не видно, а ошибки выясняются только по жалобам пользователей.

NtpManager — это один скрипт PowerShell с графическим окном, который закрывает эту задачу:

   ┌──────────────────┐        NTP          ┌───────────────────────┐      NTP      ┌──────────────┐
   │ GPS-сервер       │  ───────────────▶   │ Этот сервер           │ ───────────▶  │ Клиенты      │
   │ времени (stratum1)│  (UDP 123)         │ NTP-клиент + NTP-сервер│  (UDP 123)    │ локальной    │
   │ 192.168.1.50     │                    │ Windows Server 2008 R2 │              │ сети         │
   └──────────────────┘                     └───────────────────────┘              └──────────────┘
      интернет не нужен: время берётся из локальной сети

Установка не требуется: это NtpManager.ps1 и два запускателя .cmd. Скопируйте папку на сервер (или на флешку) и запустите двойным щелчком.

Возможности

Мониторинг

  • 17 строк состояния: служба и её тип запуска, провайдеры NtpServer/NtpClient, тип источника, интервал опроса, AnnounceFlags, кто фактически слушает UDP 123, правило брандмауэра, конфликты со сторонними NTP-сервисами, последние события службы времени;
  • реальная проверка встроенным SNTP-клиентом: stratum, идентификатор источника, смещение часов и задержка обмена (есть режим 5 замеров для оценки стабильности);
  • проверка групповой политики: показывает, заданы ли параметры политикой (она важнее реестра);
  • автообновление «лёгкое» (~50 мс: служба и реестр) и полная проверка по кнопке или раз в 10 минут;
  • всплывающие уведомления при изменении состояния службы, значок в области уведомлений;
  • журнал работы с ротацией;
  • два языка интерфейса — русский и английский: переключатель в окне и ключ -Language, по умолчанию берётся язык системы.

Управление

  • запуск, остановка, перезапуск службы, смена типа запуска;
  • настройка NTP-сервера и NTP-клиента с предпросмотром изменений и автоматической резервной копией ветви реестра перед каждой правкой;
  • автоматическое дописывание флага ,0x9 к адресу сервера (достаточно ввести только IP);
  • правило брандмауэра для входящего UDP 123: создать / показать / удалить;
  • восстановление службы времени одной кнопкой (w32tm /register), если её не видно в списке служб;
  • режим работы с групповой политикой: записать параметры и в ветвь политики либо удалить её (с резервной копией);
  • командная строка для развёртывания и мониторинга: -Report, -Apply, -RestoreService, -Help.

Требования

Компонент Требование
Операционная система Windows 7 / Windows Server 2008 R2 и новее — подробнее в разделе Поддерживаемые версии Windows
PowerShell 2.0 (входит в состав системы) — дополнительно ставить ничего не нужно
.NET Framework 2.0 / 3.5 (входит в состав Windows Server 2008 R2)
Права администратор — только для изменений; просмотр, отчёты и диагностика работают от обычного пользователя

Поддерживаемые версии Windows

Утилита работает со службой времени Windows (w32time), а её реестровая структура и команда w32tm одинаковы во всех версиях начиная с Vista / Server 2008. Версионных зависимостей в коде нет: утилита сама определяет, какой движок PowerShell и какой источник событий доступен.

Семейство Версии Состояние
Windows Server 2008 R2, 2012, 2012 R2, 2016, 2019, 2022, 2025 основная целевая система — 2008 R2; на Server Core нет gpedit.msc (утилита скажет об этом)
Windows (клиентские) 7, 8, 8.1, 10, 11 проверено фактически на Windows 10 Pro в обоих движках PowerShell
Не поддерживается Windows XP / Server 2003 нет команды w32tm /query и другая структура реестра (нет ветви TimeProviders)

Что утилита делает по-разному в зависимости от версии Windows:

Различие Как обрабатывается
PowerShell 2.0 (2008 R2 / 7) и 5.1 (10/11, Server 2012+) используется только то, что есть в 2.0; режим -STA добавляется лишь там, где он поддерживается
Источник событий службы времени на Windows 8 / Server 2012 и новее — современный поставщик Microsoft-Windows-Time-Service, на 2008 R2 / 7 — классический источник W32Time; утилита пробует оба
Служба работает внутри svchost.exe (все версии) владелец порта 123 определяется по составу служб в процессе, а не по имени процесса
Server Core нет gpedit.msc — утилита сообщает об этом и предлагает альтернативы
Домен или рабочая группа состояние определяется через WMI (PartOfDomain) и учитывается в пояснениях про политику

Установка

Установка не требуется — программа портативная.

  1. Скопируйте папку с утилитой на сервер, например в C:\NtpManager. Достаточно трёх файлов: NtpManager.ps1, NtpManager.cmd, NtpManager-Report.cmd.
  2. Запустите NtpManager.cmd двойным щелчком. Права администратора утилита запросит сама.
  3. (Только если Windows блокирует скачанные скрипты) при необходимости разрешите запуск: правый щелчок по NtpManager.ps1 → «Свойства» → «Разблокировать».

Рядом с утилитой во время работы появляются служебные файлы — их можно смело удалять, а в git они не попадают:

Файл Назначение
NtpManager.settings.ini сохранённые настройки окна
NtpManager.log журнал работы (UTF-8, ротация при 2 МБ)
NtpManager-backup\*.reg резервные копии настроек службы и ветви политики
NtpManager-status.txt отчёт, который создаёт NtpManager-Report.cmd

Быстрый старт

  1. Скопируйте папку на сервер и запустите NtpManager.cmd (согласитесь на повышение прав).
  2. Вкладка «Настройка» → кнопка «Рекомендуемые значения».
  3. В поле «Адрес GPS-сервера» впишите IP, например 192.168.1.50 (галочка «дописывать флаг ,0x9 самому» включена — дописывать ничего не нужно).
  4. Нажмите «Проверить изменения» — увидите точный список правок (в систему ничего не пишется), затем «ПРИМЕНИТЬ НАСТРОЙКИ» и подтвердите.
  5. Проверьте результат: вкладка «Состояние» (ошибок быть не должно) и вкладка «Диагностика» → «Проверить NTP».

Использование: графический интерфейс

Вкладка Что делает
Состояние строки состояния с оценкой «ОК / замечание / ошибка» и пояснением, что делать
Служба состояние и тип запуска, запуск/остановка/перезапуск, восстановление службы, блок мониторинга, блок групповой политики
Настройка параметры NTP-сервера и NTP-клиента, предпросмотр изменений, применение, импорт из резервной копии
Диагностика проверка серверов SNTP-запросом, команды службы времени, правило брандмауэра, кто слушает порт 123, текстовый отчёт

Подсказка есть у каждого элемента: достаточно навести курсор. Кнопка «Справка» в верхней панели показывает разбор всех полей и кнопок. Горячая клавиша F5 — обновить состояние.

Использование: командная строка

Команда Что делает
NtpManager.cmd графическое окно (права администратора запрашиваются сами)
NtpManager.cmd -Report текстовый отчёт о состоянии; ничего не меняет, права администратора не нужны
NtpManager.cmd -Report -ReportFile "C:\NtpManager\status.txt" то же плюс полный отчёт в файл (UTF-8)
NtpManager.cmd -RestoreService зарегистрировать службу времени заново (w32tm /register)
NtpManager.cmd -Apply ... применить настройки (нужны права администратора)
NtpManager.cmd -Help справка по ключам

Ключи для -Apply:

-ServerList "192.168.1.50,0x9"   список серверов времени (несколько — через пробел)
-TimeSourceType NTP              NTP | NT5DS | NoSync
-PollInterval 300                интервал опроса, секунды
-EnableServer / -DisableServer   включить/выключить раздачу времени клиентам
-EnableClient / -DisableClient   включить/выключить получение времени
-Reliable / -NotReliable         помечать ли машину надёжным источником (AnnounceFlags)
-OpenFirewall / -RemoveFirewall  разрешить/закрыть входящий UDP 123
-StartupMode Auto                Auto | Manual | Disabled
-MaxAllowedPhaseOffset 3600      порог исправления смещения, секунды
-EventLogFlags 2                 подробность журнала событий службы
-NoRestart                       не перезапускать службу после записи настроек
-UsePolicyBranch                 дополнительно записать параметры в ветвь групповой политики

Пример «всё сразу»:

NtpManager.cmd -Apply -ServerList "192.168.1.50,0x9" -EnableServer -EnableClient ^
    -Reliable -PollInterval 300 -OpenFirewall

Язык интерфейса и отчёта задаётся ключом -Language ru|en или переключателем «Язык» в окне (применяется после перезапуска утилиты); по умолчанию берётся язык системы: русская Windows — русский, иначе английский. Переводится как окно, так и текст отчёта и журнала; вывод самой Windows (w32tm) приводится как есть.

Коды возврата

Коды возврата предназначены для мониторинга и планировщика заданий:

Код Значение
0 всё в норме
1 есть замечания (например, не найдено правило брандмауэра)
2 есть ошибки (служба не работает, не указан источник времени, нет ответа от источника)
3 ошибка запуска (не найден PowerShell или сам скрипт)

Запуск по расписанию

Для планировщика заданий запускайте сам скрипт (а не .cmd), чтобы окно не ждало нажатия клавиши:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\NtpManager\NtpManager.ps1" ^
    -Report -ReportFile "C:\NtpManager\status.txt"

Далее можно забирать status.txt системой мониторинга или проверять код возврата задачи.

Что изменяется в системе

Все изменения выполняются только по нажатию кнопки или по ключу -Apply, и только в ветви службы времени. Перед изменениями автоматически создаётся рег-файл резервной копии.

Ключ реестра (HKLM\SYSTEM\CurrentControlSet\Services\W32Time\...) Смысл Рекомендуется
TimeProviders\NtpServer\Enabled = 1 раздача времени клиентам сети 1
TimeProviders\NtpServer\AllowNonstandardModeCombinations = 1 совместимость с нестандартными клиентами 1
TimeProviders\NtpClient\Enabled = 1 получение времени от источника 1
TimeProviders\NtpClient\SpecialPollInterval = 300 как часто опрашивать GPS-сервер, секунды 60…900
Parameters\Type = NTP брать время из ручного списка серверов (а не из иерархии домена) NTP
Parameters\NtpServer = 192.168.1.50,0x9 адрес GPS-сервера и флаги ваш GPS
Config\AnnounceFlags = 5 пометить машину надёжным источником времени 5 для сервера, 10 для обычного клиента
Config\MaxAllowedPhaseOffset порог, выше которого служба не станет «догонять» время сразу, секунды 300…3600
Config\EventLogFlags подробность записей службы в журнале System 2…3
Правило брандмауэра NTP Server UDP 123 (NtpManager) разрешает входящий UDP 123 включить
HKLM\SOFTWARE\Policies\Microsoft\W32Time\... только при включённой галочке «Записывать параметры и в ветвь политики» по необходимости

Про флаги в списке серверов: ,0x9 = 0x1 (использовать заданный интервал опроса) + 0x8 (режим клиента). Если флаг не указать, служба опрашивает источник по своему внутреннему расписанию (64…1024 с), а не по вашему интервалу.

Что проверяет утилита

Строка Как читать
Служба w32time должна быть «Работает»; если службы нет в списке служб — см. FAQ
Тип запуска службы для сервера времени нужен «Автоматически»
NTP-сервер (раздача времени) должно быть «включено», иначе клиенты не получат время
NTP-клиент (получение времени) должно быть «включено»
Параметры\Type NTP — ручной список; NT5DS означает, что время берётся из домена
Список серверов времени адрес GPS-сервера
Интервал опроса 60…900 с — разумно для локального GPS
AnnounceFlags 5 — машина считается надёжным источником
Групповая политика службы времени заданы ли параметры политикой (она важнее реестра)
Порт UDP 123 кто фактически слушает порт; svchost — это и есть служба времени
Правило брандмауэра для UDP 123 если правила нет, а брандмауэр включён — клиенты не получат время
Другие NTP-службы предупреждение о сторонних NTP-сервисах (ntpd и подобных)
Последнее событие W32Time последняя запись службы в журнале System
Отклик 127.0.0.1:123 отвечает ли NTP-сервер на этом компьютере
Сервер времени <адрес> доступен ли GPS-сервер и насколько расходятся часы

Настройка клиентов локальной сети

На каждой клиентской машине (от имени администратора):

w32tm /config /manualpeerlist:"192.168.1.10,0x9" /syncfromflags:manual /reliable:no /update
w32tm /resync /rediscover
w32tm /query /source

192.168.1.10 — адрес этого сервера (не GPS). Последняя команда должна показать адрес вашего сервера. Проверить доступность сервера со стороны клиента можно тем же инструментом: в окне на вкладке «Диагностика» впишите адрес сервера и нажмите «Проверить этот сервер» — так проверяется сквозная доступность вместе с брандмауэром.

Частые вопросы

Программа только для Windows Server 2008 R2?

Нет. «2008 R2+» в описании означает «2008 R2 и новее»: утилита рассчитана на Windows 7 / Server 2008 R2 и все последующие версии вплоть до Windows 11 и Windows Server 2025 — служба времени и команда w32tm там те же. Целевой системой 2008 R2 была в исходной задаче (сервер в локальной сети без интернета), а фактическая проверка велась на Windows 10 Pro в обоих движках PowerShell — 2.0 и 5.1. Подробнее — в разделе Поддерживаемые версии Windows.

Что писать в поле «Адрес GPS-сервера» — только IP или ещё ,0x9?

Достаточно только IP: при включённой галочке «дописывать флаг ,0x9 самому» утилита сама превратит 192.168.1.50 в 192.168.1.50,0x9. Флаг нужен потому, что без него служба опрашивает источник по своему расписанию (64…1024 с) и поле «Интервал опроса» не действует. Несколько серверов разделяются пробелом.

Поля «Макс. разовое смещение часов» и «EventLogFlags» — что туда писать?

Оба необязательные, пустое поле = «не менять». MaxAllowedPhaseOffset (по умолчанию 300 с) — порог, выше которого служба не станет исправлять время одним скачком; если часы сильно ушли, поставьте 3600. EventLogFlags (0…3) — подробность записей службы в журнале System; для разбора поставьте 2.

Почему порт 123 слушает svchost — это нормально?

Да. Служба времени не имеет отдельного процесса w32time.exe: она загружается внутрь общего процесса-хоста svchost.exe. Утилита определяет владельца порта правильно — сверяет PID службы и состав служб внутри процесса-слушателя, поэтому svchost не считается конфликтом. Предупреждение появится только для действительно постороннего процесса (например, ntpd).

А если параметры NTP раньше задавались групповой политикой?

Ничего не сломается, но политика важнее реестра. На автономном сервере (без домена) политика может прийти только из локальной групповой политики. Утилита показывает это отдельной строкой и умеет: записать параметры и в ветвь политики (галочка на вкладке «Служба»), открыть gpedit.msc и удалить ветвь политики с резервной копией. Проверить вручную:

reg query "HKLM\SOFTWARE\Policies\Microsoft\W32Time" /s

Служба времени не отображается в списке служб — что делать?

Внутреннее имя службы — w32time, отображаемое — «Служба времени Windows». Проверьте:

sc query w32time

Чаще всего регистрацию службы кто-то снял командой w32tm /unregister (или удалил ключ службы «оптимизатором»). Лечится кнопкой «Восстановить службу времени» на вкладке «Служба» (это w32tm /register) или вручную:

w32tm /register
sc config w32time start= auto
net start w32time

Если файл %windir%\system32\w32time.dll отсутствует, сначала восстановите его (sfc /scannow).

Типовые проблемы

Симптом Причина Что делать
Отклик 127.0.0.1:123: нет ответа служба остановлена, провайдер NtpServer выключен или порт занят другим процессом вкладка «Служба» → «Запустить»; включить провайдер; проверить строку «Порт UDP 123»
сервер отвечает, но не синхронизирован (LI=3 / stratum 16) сервер раздаёт время, но сам его ни от кого не получает проверить строку «Сервер времени »
Сервер времени X: нет ответа нет сети до GPS, неверный адрес, закрыт UDP 123 на GPS-сервере ping, проверить адрес и брандмауэр на GPS
Правило брандмауэра для UDP 123: не найдено клиенты не смогут получить время кнопка «Разрешить UDP 123»
Порт UDP 123: посторонний процесс порт заняла другая программа (например, ntpd) остановить её либо отказаться от раздачи времени средствами Windows
Настройки «сбрасываются» сами параметры заданы групповой политикой см. FAQ про политику
Всё «ОК» на сервере, но клиенты не синхронизируются брандмауэр, маршрутизация, настройки клиента проверить с клиента кнопкой «Проверить этот сервер»
Время «уезжает» на виртуальной машине Hyper-V подмешивает время хоста отключить «Синхронизацию времени» в интеграционных службах

Резервное копирование и откат

  • Перед каждым изменением создаётся NtpManager-backup\W32Time_ГГГГММДД_ЧЧММСС.reg — экспорт всей ветви HKLM\SYSTEM\CurrentControlSet\Services\W32Time.
  • Если включён режим политики, дополнительно сохраняется ветвь политики (W32Time-policy_*.reg).
  • Вернуть настройки: вкладка «Настройка» → «Импорт из копии...» → выбрать рег-файл (служба будет остановлена, настройки импортированы, служба запущена).
  • Вручную: reg import NtpManager-backup\W32Time_20261013_104500.reg.

Ограничения

  1. w32time — не высокоточный NTP. Служба времени Windows не предназначена для задач, где нужна высокая точность: в локальной сети с одним локальным источником расхождение обычно в пределах десятков миллисекунд, но гарантий точности нет. Если нужна точность лучше единиц миллисекунд — применяйте отдельный демон (Meinberg NTP, chrony), и тогда раздачу времени средствами Windows включать нельзя: конфликт за порт 123.
  2. Масштаб. Встроенный сервер рассчитан на десятки клиентов, не на сотни.
  3. Значения по умолчанию для автономной машины «ленивые»: у stand-alone систем заводской SpecialPollInterval может составлять 604800 секунд (неделя) — поэтому интервал опроса лучше задать явно, как это делает утилита.
  4. Проверка SNTP использует сетевой стек .NET; если в конкретном сеансе PowerShell он недоступен, утилита автоматически переходит на резервную проверку штатной утилитой w32tm /stripchart и сообщает об этом в отчёте.
  5. Нет фоновой службы. Мониторинг работает, пока открыто окно; для постоянного контроля используйте -Report по расписанию.
  6. Файл NtpManager.ps1 должен оставаться в UTF-8 с BOM — иначе PowerShell 2.0 прочитает русский текст как ANSI и скрипт не запустится.

Безопасность

  • Утилита не обращается в интернет, не собирает и не передаёт данные, не устанавливает службы, не создаёт задачи в планировщике и не работает в фоне после закрытия окна.
  • Все изменения выполняются только после подтверждения; перед ними создаётся резервная копия.
  • Просмотр и отчёты доступны обычному пользователю; изменения требуют прав администратора.
  • Ветвь групповой политики утилита без вашей команды не изменяет — только читает и предупреждает.
  • Журнал работы (NtpManager.log) лежит рядом с утилитой и содержит только выполненные действия и результаты проверок.

Проверено и не проверено

Разработка и проверка выполнялись на Windows 10 Pro с использованием настоящего движка PowerShell 2.0 (powershell.exe -Version 2), то есть в режиме, соответствующем Windows Server 2008 R2, и в PowerShell 5.1.

Фактически проверено: разбор синтаксиса в PowerShell 2.0 и 5.1; чтение русского текста из UTF-8 с BOM; режим -Report и запись отчёта в файл; код возврата, доходящий до вызывающего процесса; SNTP-клиент (получены реальные ответы серверов: stratum 13 и stratum 4 с корректными смещениями); резервный путь через w32tm /stripchart; раскладка окна (0 наложений после принудительной перераскладки); 39 всплывающих подсказок; определение владельца порта 123 (служба внутри svchost распознаётся как своя); автодописывание флага 0x9; удаление ветви политики на пустом месте (ничего не тронуто); предпросмотр в режиме политики.

Отдельно проверена совместимость двух движков: специфичные для PowerShell 2.0 особенности (foreach по $null выполняет тело один раз, @($null) даёт один пустой элемент) больше не дают ложных предупреждений о конфликте за порт 123 и пустых строк о службах; события службы времени читаются и из современного поставщика Microsoft-Windows-Time-Service (Windows 10/11), и из классического W32Time (Windows Server 2008 R2 / 7), поэтому строка состояния показывает реальное событие с датой на обеих платформах.

Локализация проверена в обоих языках: безоконный тест строит окно и в русском, и в английском варианте (заголовок, вкладки, кнопки, галочки, заголовки таблицы, подсказки, пункты списков), а -Report -Language en даёт полностью английский отчёт при неизменном русском по умолчанию. Покрытие словаря проверяется отдельным тестом: он перебирает все русские строки программы и показывает те, для которых нет английского перевода. В текущей версии без перевода остаются только строки русской справки (в английском режиме показывается отдельный английский текст) и название языка «Русский» в списке выбора.

Не проверялось на живой системе: запись значений в реестр и в ветвь политики, перезапуск службы, добавление правила брандмауэра, запуск w32tm /register, реальный обмен с GPS-сервером (в среде разработки нет прав администратора и нет GPS-сервера). Это следует один раз проверить на тестовом сервере: сначала кнопкой «Проверить изменения» (ничего не меняет), затем «ПРИМЕНИТЬ НАСТРОЙКИ».

Структура репозитория

NtpManager.ps1                      основная программа (UTF-8 с BOM)
NtpManager.cmd                      запускатор: окно или командная строка
NtpManager-Report.cmd               запускатор быстрого отчёта (двойной щелчок)
README.md                           этот файл (русская документация)
README.en.md                        английская документация
CHANGELOG.md                        история версий
CONTRIBUTING.md                     правила участия и требования к коду
SECURITY.md                         политика безопасности и порядок сообщений об уязвимостях
LICENSE                             лицензия MIT
.gitignore                          что не попадает в репозиторий
.gitattributes                      нормализация переводов строк
.github/workflows/syntax-check.yml  проверка синтаксиса и дымовой тест в CI
.github/ISSUE_TEMPLATE/             шаблоны обращений (ошибка, предложение)

Лицензия

MIT — см. LICENSE.

Автор: Денис Савинов (@dn1984).

About

Portable NTP server/client manager for the Windows Time service (w32time) - Windows 7 / Server 2008 R2 and newer up to Windows 11 / Server 2025. Портативная утилита управления службой времени Windows: NTP-сервер для локальной сети и NTP-клиент для сервера GPS (Windows 7 / Server 2008 R2 и новее).

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages