2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
1 |
|
Синхронизация времени с корректировкой03.05.2017, 16:53. Показов 23256. Ответов 20
Здравствуйте сам я в программировании профан, но реалии жизни вынуждают. Вот решил обратиться к специалистам.
__________________
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
04.05.2017, 00:49 |
2 |
|||
——————————
2 |
2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
04.05.2017, 07:59 [ТС] |
3 |
Спасибо, всё работает как нужно. С некоторыми параметрами (служб) поэкспериментирую. Добавлено через 3 часа 59 минут
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
04.05.2017, 10:35 |
4 |
как добавить не целые секунды, а с десятыми долями? Просто добавить доли не получится — cmd работает только с целыми числами.
0 |
2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
04.05.2017, 10:42 [ТС] |
5 |
Заранее благодарен вам за оказанную помощь. Без вас я бы ни за что не не осилил этот вопрос. Если в VBA хоть что-то понятно, то в (CMD/BAT) для меня просто набор знаков
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||||||
04.05.2017, 10:51 |
6 |
|||||||
В принципе, если вам точный перевод времени не нужен — достаточно просто к итоговой строке времени
добавить нужное число миллисекунд
1 |
lapin9126 2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
||||||||
04.05.2017, 11:27 [ТС] |
7 |
|||||||
Спасибо, всё гениальное-просто!!!!!! Добавлено через 22 минуты
на
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
04.05.2017, 12:21 |
8 |
|||
Для корректного суммирования поменял параметр А вот здесь я не понял Здесь делается замена возможного пробела в числах на 0 (пробел вместо ведущего ноля может появляться во времени до 10 утра). Код ============================ [ENTER the offset in milliseconds]:1500 ============================ ТЕКУЩЕЕ ВРЕМЯ:12:02:59,70 ============================ (12 * 3600 * 1000) + (02 * 60 * 1000) + (59 * 1000) + 70 = 43379070 43379070 + 1500 = 43380570 ============================ НОВОЕ ВРЕМЯ: 12:3:0,57 ============================ time before: 12:02:59,70 time new: 12:3:0,57 time after: 12:03:00,05
Формула переводит все в миллисекунды, суммирует и конвертирует обратно в часыминутысекундымиллисекунды. И вроде все делает правильно.
0 |
Любознательный 3223 / 863 / 231 Регистрация: 10.03.2016 Сообщений: 2,039 |
|
04.05.2017, 12:30 |
9 |
Garry Galler,
Где тут косяк :-)? Возможно, не причина, но тем не менее…на первый взгляд:
(12 * 3600 * 1000) Вот здесь, какие-такие единицы мы получим?
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
04.05.2017, 13:50 |
10 |
YuS_2, Добавлено через 5 минут + 70 похоже косяк. Там же доли: 70 это 0.7, то есть 700 мск. Добавлено через 44 минуты
0 |
Любознательный 3223 / 863 / 231 Регистрация: 10.03.2016 Сообщений: 2,039 |
|
04.05.2017, 13:55 |
11 |
Разве нет? Да, верно … это я тут по диагонали, одним глазом форум читаю
0 |
2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
04.05.2017, 14:12 [ТС] |
12 |
Это я не вовремя проверял, надо утром с 8 до 10 тестировать.
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
04.05.2017, 14:25 |
13 |
|||
lapin9126,
Здесь ненужные ведущие ноли будут убираться и ошибки не случится.
0 |
lapin9126 2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
||||
04.05.2017, 14:44 [ТС] |
14 |
|||
Я правильно понял конечный код должен быть такой:
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
04.05.2017, 15:24 |
15 |
Да, пока это все что я могу предложить. до и после знака равно — лучше убрать. Они в батниках как минимум нежелательны, как максимум приводят к ошибкам, хотя при сложении чисел вроде не влияют. Это у меня python code style уже мешает батники правильно писать
0 |
2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
05.05.2017, 04:22 [ТС] |
16 |
Хорошо, подправлю. Еще раз благодарю за помощь. Добавлено через 12 часов 15 минут Отправка команды синхронизации на локальный компьютер
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
05.05.2017, 15:10 |
17 |
lapin9126, Откуда у вас ведущий ноль, если батник его исключает операций вычитания 108 — 100=8?
0 |
lapin9126 2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
||||
05.05.2017, 15:47 [ТС] |
18 |
|||
Да кто его знает. Может в коде что-то не так. Спасибо за помощь. Пытаюсь на VBS написать.
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
05.05.2017, 15:59 |
19 |
lapin9126, первую версию кода , которая не содержит исправления ошибки ведущего нуля. правильную версию кода , в которую внесены мои поправки переменных. И эту версию вы почему-то НЕ используете…
0 |
2 / 2 / 0 Регистрация: 19.10.2015 Сообщений: 176 |
|
05.05.2017, 16:17 [ТС] |
20 |
Прошу прощения, с утра наверно еще не проснулся и не то скопировал.
0 |
Выкладываю bat-скрипт для быстрой настройки ntp-клиента Windows. Написал его для себя и решил поделиться.
Принцип работы:
- запускаем скрипт от имени администратора (актуально для семейства Windows старше XP).
- вводим адрес ntp сервера который хотим задать.
- вводим время периода обновлений времени в минутах.
- ждем выполнения, и наблюдаем результат выполнения в консоли.
Код bat файла
@echo off
rem Скрипт настройки NTP клиента Windows
echo Скрипт настройки NTP клиента Windows
echo.
rem -- ввод адреса NTP сервера
set /p ntp_server="Введите адрес NTP сервера: "
rem -- ввод периуда обновления времени в минутах
set /p ntp_update="Задайте периуд обновления (min): "
rem -- задаем в качестве сервера по умолчанию 0 элемент
echo.
echo =======================================================
echo Задаем в качестве сервера по умолчанию 0 элемент
REG ADD HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionDateTimeServers /ve /t REG_SZ /d 0 /f
rem -- редактируем значение сервера обновлений из списка под новером 0
echo.
echo =======================================================
echo Изменяем текущие значение сервера обновлений списка серверов на %ntp_server%
REG ADD HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionDateTimeServers /v 0 /t REG_SZ /d %ntp_server% /f
rem -- включаем NTP клиент
echo.
echo =======================================================
echo Включаем NTP клиент
REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters /v Type /t REG_SZ /d NTP /f
rem -- задаем текущий сервер обновления
echo.
echo =======================================================
echo Задаем текущий сервер обновления %ntp_server%
REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters /v NtpServer /t REG_SZ /d %ntp_server%,0x9 /f
rem -- устонавливаем периуд обновления
echo.
echo =======================================================
echo Устонавливаем периуд обновления %ntp_update% минут
rem -- перевод времени в секунды
set /a ntp_update*=60
REG ADD HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient /v SpecialPollInterval /t REG_DWORD /d %ntp_update% /f
rem -- задаем службе времени автоматический запуск
echo.
echo =======================================================
echo Задаем службе времени автоматический запуск
sc config w32time start= auto
rem -- запускаем/перезапускаем незапущеную/зупущеную службу времени
echo. && echo======================================================= && echo Попытка перезапуска службы времени && echo. && sc stop w32time && PING -n 5 -w 1000 127.0.0.1 >nul && sc start w32time || echo. && echo ======================================================= && echo Попытка запуска службы времени && echo. && sc start w32time
echo.
pause
Результат работы
P.S.: Не забываем выставить в редакторе кодировку создаваемого bat файла в OEM 866 для корректного отображения кириллических символов.
You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Rem run as administrator | |
@echo on & @setlocal enableextensions | |
@echo ========================= | |
@echo Turn off the time service | |
net stop w32time | |
@echo ====================================================================== | |
@echo Set the SNTP (Simple Network Time Protocol) source for the time server | |
w32tm /config /syncfromflags:manual /manualpeerlist:«0.it.pool.ntp.org 1.it.pool.ntp.org 2.it.pool.ntp.org 3.it.pool.ntp.org« | |
@echo ============================================= | |
@echo … and then turn on the time service back on | |
net start w32time | |
@echo ============================================= | |
@echo Tell the time sync service to use the changes | |
w32tm /config /update | |
@echo ======================================================= | |
@echo Reset the local computer’s time against the time server | |
w32tm /resync /rediscover | |
@endlocal & @goto :EOF |
Проверить синхронизируются ли часы локального компьютера с каким-нибудь сервером можно командой
w32tm /query /status
Компьютеры, включенные в домен, по умолчанию синхронизируют свои часы с контроллером домена.
Настройка синхронизации часов
— Проверяем запущена ли «Служба времени»:
C:> services.msc
— Можно запустить вручную, но лучше настроить службу для запуска автоматически. Если в ручную, то:
С:> net start w32time
— Для регистрации, как службы и добавления стандартной конфигурации в реестр:
С:> w32tm /register
— Создаём командный файл timesync.bat, который настроит синхронизацию времени с локальным сервером 10.0.0.85. Скрипт необходимо выполнить с административными правами.
@echo off rem This will synchronize time with server 10.0.0.85 rem rem To ensure time service is up run services.msc rem In Russian it calls "Служба времени Windows" rem In register: rem HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters rem echo -- This script will synchronize time with server 10.0.0.85. Current status: w32tm /query /status w32tm /tz echo -- Press Ctrl+C if you don't want synchronization or any key otherwise. pause > null echo -- Set time server w32tm /config /manualpeerlist:10.0.0.85 /syncfromflags:manual /reliable:yes /update echo -- New settings: w32tm /query /status echo -- Press any key to exit. pause > null
и запускаем его на каждом компьютере, где хотим синхронизировать время с сервером. Сам сервер, в свою очередь, можно синхронизировать через Интернет.
Также можно наблюдать текущую разницу во времени с удалённым компьютером:
w32tm /stripchart /computer:10.0.0.85 /samples:3 /dataonly
Раньше вместо w32tm использовалась команда net time.
w32tm | net time |
---|---|
Запрос текущего состояния синхронизации: сервер, расхождение и т.д. | |
w32tm /query /status | net time /querysntp |
Принудительная синхронизация часов с сервером 10.0.0.85 | |
w32tm /config /manualpeerlist:10.0.0.85 /syncfromflags:manual /reliable:yes /update | net time /setsntp:10.0.0.85 |
Настройка списка серверов для синхронизации часов | |
w32tm /config /manualpeerlist:»10.0.0.85 10.0.0.2 ntp0.zenon.net» /syncfromflags:manual /reliable:yes /update | net time /setsntp:»10.0.0.85 10.0.0.2 ntp0.zenon.net» |
I pulled this out of an email archive from an MCSE friend of mine from 2009, so the information should be fairly close, but may have changed. I have changed roles pretty significantly since then:
Each windows PDC emulator is the domains time server. If the domains are all in the same forest, you just need to sync the root domains PFC with an atomic external time source. If domains are in separate forests (dmz domain for ex) each PDC emulator needs to be set to look the same set of external atomic clocks. off the top of my head, I use these two in my pool of 5 or so.
Time-a.nist.gov
Time-b.nist.gov
On your PDC run the following:
net time /setsntp time-a.nist.gov time-b.nist.gov
You need to make sure udp port 123 is allowed outbound from PDC.
all other servers, workstations should have windows time service started.
If you run the following query on a box having trouble and see it set to
windows.Time.com
or maybe
time.windows.com
you need to reset it to use domain time. Run the same as above with NO time source:
net time /setsntp
An invaluable reskit tool to check domain time is w32tm. Run
W32tm /monitor
If memory serves, Windows 2012 (?) and above, changed the name of the service from W32tm to W32time, so your mileage may vary.
Lastly, if running VMWare esx, you need to make sure all host esx servers are setup to sync to the same external time servers as your windows boxes, using their NTP.conf file. Make sure all vm’s are running the latest VM tools and set the tools to sync their time with the esx host. I believe you also stop the windows time service so they do not compete but I’d have to verify. This is true for all VM’s but the pdc emulator if running it in a VM. It will not sync with the esx host and should be setup exactly as stated above. Good luck.
Continuing on..
First, I would ask myself..
Do I have PDC (Primary Domain Controller)?
Or, am I just dealing with a bunch of stand-alone workstations on a peer-to-peer network?
You did not state anything about your topology or network.
If you have an NTP server, your clients will connect to it.
Like my good friend stated, you will need to use an NTP relay that your clients connect to.
He stated: On your PDC (or in a peer-to-peer) setup, you would do the following:
net time /setsntp time-a.nist.gov time-b.nist.gov
now, moving over to your clients and other member servers, you would do the same thing with the exception of no time servers given, e.g.
net time /setsntp
as your LAN clients and other member servers will set/synchronize with the PDC several times a day.
So, taking your batch file, I would do something like the following for your PDC (you may also do well to add some SLEEP or PAUSE commands to your Batch File):
@echo off
net time /setsntp time-a.nist.gov time-b.nist.gov
w32tm /query /peers
net stop w32time
net start w32time
w32tm /resync /nowait
EOF
And then your workstations and other servers (again, you may also do well to add some SLEEP or PAUSE commands to your Batch File):
@echo off
net time /setsntp
w32tm /query /peers
net stop w32time
net start w32time
w32tm /resync /nowait
EOF
I don’t know how else to explain this to you as he offered how to do this in bite-sized chunks.
Hope this helps.
Синхронизация времени в Windows
Абсолютно банальный пост, но не написать не могу. Как мне казалось, проблемы синхронизации времени уже нигде не существует, ведь каждый комп подключен к интернету. Ха! В нашей деревне есть еще организации, где самое точное время показывают часы, висящие над вахтершей бабой Клавой.
Наблюдал сегодня своими глазами в небольшой конторе. Парк машин порядка 15 компов. Домена никакого нет. Все компьютеры объеденины в локальную сеть двумя дешевыми китайскими свитчами. Один комп помимо этого имеет подключени к интернету по ADSL. Одмина в конторе нет, точнее он есть, но какой-то приходящий, который там появляется только в день выдачи зарплаты. На всех компах время разное с разбегом в 20 минут. Красота!
Освежим память и расскажем, как сделать порядок в этом вопросе.
И так, сначала условимся на том, что один комп у нас будет выполнять функцию сервера точного времени. Очевидно, что на эту роль лучше всего подходит тот ПК, который уже подключен к внешнему миру. Точное время он будет брать из интернета, а все остальные компы локальной сети будут сверять свои часики с этим ПК по протоколу NTP.
Чтобы просто взять и синхронизировать время с сервером точного времени нужно всего-то в командной строке набрать:
net time \имя_компа_сервера_точного_времени /set
Проще некуда. Если уж совсем лень читать дальше, то можно засунуть эту строку в cmd файл и в автозагрузку запихать. А мы дальше расскажем как сделать всё красиво.
Во-первых определим, какой IP-адрес у нашего сервера точного времени. Для примера пусть будет 192.168.1.1
Открываем командную строку и пишем там следующее:
w32tm /config /syncfromflags:manual /manualpeerlist:192.168.1.1
Здесь мы указываем сервера точного времени нашей локальной сети. Их может быть несколько, тогда все перечисляем через запятую без пробела.
Затем, даем команду
После этого среди всех сервером точного времени указываем приоритетный. В нашем примере он всего один, его и пишем:
net time /setsntp:192.168.1.1
Перезагружаем службу времени Windows
net stop w32time && net start w32time
И синхронизируем
После этих манипуляций комп будет сам синхронизировать время с сервером. Проблема закрыта!
Одмин, не ленись, сделай правильное время на компах!
Ручная синхронизация времени
net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"0.it.pool.ntp.org 1.it.pool.ntp.org 2.it.pool.ntp.org 3.it.pool.ntp.org"
net start w32time
w32tm /config /update
w32tm /resync /rediscover
Готовый BAT-файл: time-sync.zip [242 b] (cкачиваний: 194)
Запускал через командную строку (Dos) на WinXP (x32) SP3 и Win7 (x64) SP1 — всё работает!
*
NTP Servers (серверы точного времени): www.ntp-servers.net
* * *
Настройка сети через командную строку и BAT файл: ravensblade.ru
* * *
Отключаем проверку цифровой подписи драйверов в Windows 7
В меню политик перейдите в раздел:
User Configuration -> Administrative Templates -> System -> Driver Installation
В правой панели найдите пункт ‘Code Signing for Device Drivers’ и дважды щелкните по нему
В появившемся окне выберите ‘Enabled’, а в нижнем меню — ‘Ignore’. Нажмите Ок и перезагрузите компьютер. После перезагрузи и применения политика, в своей Windows 7 вы полностью отключите подписывание драйверов, и сможете установить любые, в том числе, неподписанные драйвера
*
bcdedit.exe /set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe /set TESTSIGNING ON
© winitpro.ru (08.05.14)
* * *
Проверка файлов Windows 7
cmd — от имени Администратора
sfc /scannow
Запуск средства проверки системных файлов (microsoft.com): support.microsoft.com
* * *
Три десятилетия Windows — История Windows: от 1.0 до 10: www.gazeta.ru (20.11.2015)
* * *
Упрощение анализа дампов памяти windows: geektimes.ru (10.01.18)
_
Возник тут вопрос о том, чтобы синхронизировать время на компьютере сразу после загрузки Windows. Поднял свои архивы, нашел один пакетный файл, который писал еще много лет назад. Он работал, но, как говорится, «время идет», появились новые пожелания. Поэтому файл был полностью переписан.
Для внесения изменений в параметры службы Windows нам нужно ее остановить, внести необходимые изменения и заново запустить. После всего этого выполнить синхронизацию времени. Что данный «батник» и делает.
Интервал обновления изменен на «один раз в сутки» против значения по умолчанию «один раз в неделю». Также убраны ограничения интервалов, дата на компьютере может быть любой, синхронизация все равно будет произведена. Тестировал на разнице в 7 лет. В качестве сервера времени выбран ru.pool.ntp.org.
Ниже код того, что у меня получилось. Можно, конечно, еще добавить команды для добавления задания в планировщик, но, на мой взгляд, это уже лишнее и лучше проделать это руками.
@echo off
net stop w32time
sc config w32time start= auto
reg add HKLMSYSTEMCurrentControlSetservicesW32TimeConfig /v MaxNegPhaseCorrection /t REG_DWORD /d "4294967295" /f
reg add HKLMSYSTEMCurrentControlSetservicesW32TimeConfig /v MaxPosPhaseCorrection /t REG_DWORD /d "4294967295" /f
reg add HKLMSYSTEMCurrentControlSetservicesW32TimeTimeProvidersNtpClient /v SpecialPollInterval /t REG_DWORD /d "86400" /f
net start w32time
w32tm /config /syncfromflags:manual /manualpeerlist:ru.pool.ntp.org
w32tm /config /update
w32tm /resync
exit