Портативная утилита мониторинга и управления службой времени Windows (w32time): NTP-сервер для локальной сети + NTP-клиент, берущий время у сервера GPS.
Русский · 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 (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) и учитывается в пояснениях про политику |
Установка не требуется — программа портативная.
- Скопируйте папку с утилитой на сервер, например в
C:\NtpManager. Достаточно трёх файлов:NtpManager.ps1,NtpManager.cmd,NtpManager-Report.cmd. - Запустите
NtpManager.cmdдвойным щелчком. Права администратора утилита запросит сама. - (Только если Windows блокирует скачанные скрипты) при необходимости разрешите запуск:
правый щелчок по
NtpManager.ps1→ «Свойства» → «Разблокировать».
Рядом с утилитой во время работы появляются служебные файлы — их можно смело удалять, а в git они не попадают:
| Файл | Назначение |
|---|---|
NtpManager.settings.ini |
сохранённые настройки окна |
NtpManager.log |
журнал работы (UTF-8, ротация при 2 МБ) |
NtpManager-backup\*.reg |
резервные копии настроек службы и ветви политики |
NtpManager-status.txt |
отчёт, который создаёт NtpManager-Report.cmd |
- Скопируйте папку на сервер и запустите
NtpManager.cmd(согласитесь на повышение прав). - Вкладка «Настройка» → кнопка «Рекомендуемые значения».
- В поле «Адрес GPS-сервера» впишите IP, например
192.168.1.50(галочка «дописывать флаг ,0x9 самому» включена — дописывать ничего не нужно). - Нажмите «Проверить изменения» — увидите точный список правок (в систему ничего не пишется), затем «ПРИМЕНИТЬ НАСТРОЙКИ» и подтвердите.
- Проверьте результат: вкладка «Состояние» (ошибок быть не должно) и вкладка «Диагностика» → «Проверить 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 /source192.168.1.10 — адрес этого сервера (не GPS). Последняя команда должна показать адрес вашего
сервера. Проверить доступность сервера со стороны клиента можно тем же инструментом: в окне на
вкладке «Диагностика» впишите адрес сервера и нажмите «Проверить этот сервер» — так проверяется
сквозная доступность вместе с брандмауэром.
Нет. «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.
Достаточно только IP: при включённой галочке «дописывать флаг ,0x9 самому» утилита сама
превратит 192.168.1.50 в 192.168.1.50,0x9. Флаг нужен потому, что без него служба опрашивает
источник по своему расписанию (64…1024 с) и поле «Интервал опроса» не действует. Несколько серверов
разделяются пробелом.
Оба необязательные, пустое поле = «не менять». MaxAllowedPhaseOffset (по умолчанию 300 с) —
порог, выше которого служба не станет исправлять время одним скачком; если часы сильно ушли,
поставьте 3600. EventLogFlags (0…3) — подробность записей службы в журнале System; для разбора
поставьте 2.
Да. Служба времени не имеет отдельного процесса w32time.exe: она загружается внутрь общего
процесса-хоста svchost.exe. Утилита определяет владельца порта правильно — сверяет PID службы
и состав служб внутри процесса-слушателя, поэтому svchost не считается конфликтом. Предупреждение
появится только для действительно постороннего процесса (например, ntpd).
Ничего не сломается, но политика важнее реестра. На автономном сервере (без домена) политика
может прийти только из локальной групповой политики. Утилита показывает это отдельной строкой
и умеет: записать параметры и в ветвь политики (галочка на вкладке «Служба»), открыть 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.
- w32time — не высокоточный NTP. Служба времени Windows не предназначена для задач, где нужна высокая точность: в локальной сети с одним локальным источником расхождение обычно в пределах десятков миллисекунд, но гарантий точности нет. Если нужна точность лучше единиц миллисекунд — применяйте отдельный демон (Meinberg NTP, chrony), и тогда раздачу времени средствами Windows включать нельзя: конфликт за порт 123.
- Масштаб. Встроенный сервер рассчитан на десятки клиентов, не на сотни.
- Значения по умолчанию для автономной машины «ленивые»: у stand-alone систем заводской
SpecialPollIntervalможет составлять 604800 секунд (неделя) — поэтому интервал опроса лучше задать явно, как это делает утилита. - Проверка SNTP использует сетевой стек .NET; если в конкретном сеансе PowerShell он недоступен,
утилита автоматически переходит на резервную проверку штатной утилитой
w32tm /stripchartи сообщает об этом в отчёте. - Нет фоновой службы. Мониторинг работает, пока открыто окно; для постоянного контроля
используйте
-Reportпо расписанию. - Файл
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).