Абсолютно банальный пост, но не написать не могу. Как мне казалось, проблемы синхронизации времени уже нигде не существует, ведь каждый комп подключен к интернету. Ха! В нашей деревне есть еще организации, где самое точное время показывают часы, висящие над вахтершей бабой Клавой.
Наблюдал сегодня своими глазами в небольшой конторе. Парк машин порядка 15 компов. Домена никакого нет. Все компьютеры объеденины в локальную сеть двумя дешевыми китайскими свитчами. Один комп помимо этого имеет подключени к интернету по ADSL. Одмина в конторе нет, точнее он есть, но какой-то приходящий, который там появляется только в день выдачи зарплаты. На всех компах время разное с разбегом в 20 минут. Красота!
Освежим память и расскажем, как сделать порядок в этом вопросе.
И так, сначала условимся на том, что один комп у нас будет выполнять функцию сервера точного времени. Очевидно, что на эту роль лучше всего подходит тот ПК, который уже подключен к внешнему миру. Точное время он будет брать из интернета, а все остальные компы локальной сети будут сверять свои часики с этим ПК по протоколу NTP.
Чтобы просто взять и синхронизировать время с сервером точного времени нужно всего-то в командной строке набрать:
Код:
net time \\имя_компа_сервера_точного_времени /set
Проще некуда. Если уж совсем лень читать дальше, то можно засунуть эту строку в cmd файл и в автозагрузку запихать. А мы дальше расскажем как сделать всё красиво.
Во-первых определим, какой IP-адрес у нашего сервера точного времени. Для примера пусть будет 192.168.1.1
Решение проблем с ошибкой синхронизации времени Windows
Выдержка из справки Windows:
В случае сбоя синхронизации часов:
По нажатии кнопки Обновить сейчас часы должны быть незамедлительно синхронизированы.
Попытка выполнить эту операцию может пройти неудачно по одной из следующих причин:
...
Слишком большая разница между временем, установленным на локальном компьютере и на сервере времени в Интернете. Сервер времени Интернета может не выполнить синхронизацию с часами на компьютере пользователя при разнице во времени более 15 часов. Чтобы правильно выполнить синхронизацию времени, убедитесь, что параметры даты и времени совпадают с текущим временем, установленным в окне «Свойства даты и времени» на панели управления.
Это ограничение можно обойти:
- рекомендую внимательно почитать и выполнить все, что написано в этой заметке.
Короче говоря, создаем и применяем вот такой твик реестра:
Код:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config]
"MaxNegPhaseCorrection"=dword:ffffffff
"MaxPosPhaseCorrection"=dword:ffffffff
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters]
"NtpServer"="pool.ntp.org,0x01"
Выберите сервер, к которому у Вас наименьший пинг.
Можно проверить через командную строку, например:
Кроме того, синхронизация может не работать по причине отключенной службы.
Для автоматизации:
- включения службы w32time
- внесения в настройки сервера времени pool.ntp.org
- выполнения синхронизации
- перевода службы обратно в ручной режим (по-умолчанию)
я написал небольшой скрипт:
Если Вам важно проверять успешность операции обновления времени,
можете воспользоваться вот таким вариантом скрипта (успех проверяется чтением результата от консольной команды w32tm)
и поддерживает как русскую так и английскую локализации систем:
VB.NET / VBA:
with CreateObject("WScript.Shell")
.Run "sc config w32time start= auto", 0, true
.Run "net start w32time", 0, true
.Run "w32tm /config /syncfromflags:manual /manualpeerlist:pool.ntp.org,0x01", 0, true
.Run "w32tm /config /update", 0, true
set ExecObj = .Exec("w32tm /resync")
sRet = CharsetConv(ExecObj.StdOut.ReadAll(), "ibm866", "windows-1251")
.Run "sc config w32time start= demand", 0, true
if instr(1, sRet, "Команда выполнена успешно", 1) <> 0 or instr(1, sRet, "The command completed successfully", 1) <> 0 then _
WScript.Echo("Sync - Success.") else WScript.Echo("Sync - FAILED !!!")
end with
Function CharsetConv(Text, SourceCharset, DestCharset)
with CreateObject("ADODB.Stream")
.Type=2
.Mode=3
.Open
.Charset = DestCharset
.WriteText Text
.Position=0
.Charset = SourceCharset
CharsetConv = .ReadText
end with
End Function
Спасибо за внимание!
Всегда раз ответить на Ваши вопросы.