Статья Синхронизация времени в Windows

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Dragokas, 1 мар 2014.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Синхронизация времени в Windows

    Абсолютно банальный пост, но не написать не могу. Как мне казалось, проблемы синхронизации времени уже нигде не существует, ведь каждый комп подключен к интернету. Ха! :) В нашей деревне есть еще организации, где самое точное время показывают часы, висящие над вахтершей бабой Клавой.

    001.JPG

    Наблюдал сегодня своими глазами в небольшой конторе. Парк машин порядка 15 компов. Домена никакого нет. Все компьютеры объеденины в локальную сеть двумя дешевыми китайскими свитчами. Один комп помимо этого имеет подключени к интернету по ADSL. Одмина в конторе нет, точнее он есть, но какой-то приходящий, который там появляется только в день выдачи зарплаты. На всех компах время разное с разбегом в 20 минут. Красота!

    Освежим память и расскажем, как сделать порядок в этом вопросе.

    И так, сначала условимся на том, что один комп у нас будет выполнять функцию сервера точного времени. Очевидно, что на эту роль лучше всего подходит тот ПК, который уже подключен к внешнему миру. Точное время он будет брать из интернета, а все остальные компы локальной сети будут сверять свои часики с этим ПК по протоколу NTP.

    Чтобы просто взять и синхронизировать время с сервером точного времени нужно всего-то в командной строке набрать:
    Код (Text):
    net time \\имя_компа_сервера_точного_времени /set
    Проще некуда. Если уж совсем лень читать дальше, то можно засунуть эту строку в cmd файл и в автозагрузку запихать. А мы дальше расскажем как сделать всё красиво.

    Во-первых определим, какой IP-адрес у нашего сервера точного времени. Для примера пусть будет 192.168.1.1

    Открываем командную строку и пишем там следующее:
    Код (Text):
    w32tm /config /syncfromflags:manual /manualpeerlist:192.168.1.1
    Здесь мы указываем сервера точного времени нашей локальной сети. Их может быть несколько, тогда все перечисляем через запятую без пробела.

    Затем, даем команду
    Код (Text):
    w32tm /config /update
    После этого среди всех сервером точного времени указываем приоритетный. В нашем примере он всего один, его и пишем:
    Код (Text):
    net time /setsntp:192.168.1.1
    Перезагружаем службу времени Windows
    Код (Text):
    net stop w32time && net start w32time
    И синхронизируем
    Код (Text):
    w32tm /resync
    После этих манипуляций комп будет сам синхронизировать время с сервером. Проблема закрыта!

    Одмин, не ленись, сделай правильное время на компах!
     
    Гимаев Наиль, E100, Phoenix и 2 другим нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Решение проблем с ошибкой синхронизации времени Windows

    Выдержка из справки Windows:

    Это ограничение можно обойти:
    - рекомендую внимательно почитать и выполнить все, что написано в этой заметке.

    Короче говоря, создаем и применяем вот такой твик реестра:

    Код (Microsoft Registry):
    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"
    Выберите сервер, к которому у Вас наименьший пинг.
    Можно проверить через командную строку, например:
    Код (Text):

    ping pool.ntp.org
    ping 0.pool.ntp.org
    ping 1.pool.ntp.org
    ping ru.pool.ntp.org
     
    А вот такой командой Вы можете запустить синхронизацию:
    (из командной строки с повышенными привилегиями)
    Код (Text):

    w32tm /config /update
     
    Кроме того, синхронизация может не работать по причине отключенной службы.
    Для автоматизации:
    - включения службы w32time
    - внесения в настройки сервера времени pool.ntp.org
    - выполнения синхронизации
    - перевода службы обратно в ручной режим (по-умолчанию)
    я написал небольшой скрипт:

    Код (vb.net):
    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
        .Run "w32tm /resync", 0, true
        .Run "sc config w32time start= demand", 0, false
    end with
    Сохранять с расширением .VBS
    Запускать с повышенными привилегиями.

    Если Вам важно проверять успешность операции обновления времени,
    можете воспользоваться вот таким вариантом скрипта (успех проверяется чтением результата от консольной команды w32tm)
    и поддерживает как русскую так и английскую локализации систем:

    Код (vb.net):
    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
    Спасибо за внимание!
    Всегда раз ответить на Ваши вопросы.
     
    Последнее редактирование: 20 апр 2015
    orderman, Phoenix и Гимаев Наиль нравится это.
  3. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.840
    Симпатии:
    1.829
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.478
    Симпатии:
    4.306
    Phoenix, сеть с прокси? Скрипт запускал с повышенными привилегиями?
     
  5. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.840
    Симпатии:
    1.829
    Нет прокси. С привилегиями сделал - то же самое. В программке отставание стабильное на 30 сек. Перезагрузку не делал, может повлияет, потом напишу.
     

Поделиться этой страницей