Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新/重新启动后Windows服务器时间不正确_Windows_Batch File_Time_Server_Windows Server 2012 - Fatal编程技术网

更新/重新启动后Windows服务器时间不正确

更新/重新启动后Windows服务器时间不正确,windows,batch-file,time,server,windows-server-2012,Windows,Batch File,Time,Server,Windows Server 2012,我们正在运行Windows Server 2012 R2。我发现,当服务器安装更新并在每天凌晨4点重新启动时,它将在错误的时区重新启动。我们的时间大小是EST-5,当前为4,采用夏令时,服务器默认为UTC-0,比我们的时区提前4小时 当我们最初发现这个问题时,我们发现唯一有效的解决方法是在服务器重新启动时使用任务调度器运行sync命令。直到两周前,即2017年6月15日左右,这项任务和指挥一直运作良好,但从那时起就没有起作用。我已经查看了任务/事件日志,它声称已经成功运行,但还没有 我在这一点上

我们正在运行Windows Server 2012 R2。我发现,当服务器安装更新并在每天凌晨4点重新启动时,它将在错误的时区重新启动。我们的时间大小是EST-5,当前为4,采用夏令时,服务器默认为UTC-0,比我们的时区提前4小时

当我们最初发现这个问题时,我们发现唯一有效的解决方法是在服务器重新启动时使用任务调度器运行sync命令。直到两周前,即2017年6月15日左右,这项任务和指挥一直运作良好,但从那时起就没有起作用。我已经查看了任务/事件日志,它声称已经成功运行,但还没有

我在这一点上唯一的想法是,Windows update中有一些东西使同步代码变得无用。但我不知道那会是什么。有没有人对如何识别问题提出建议

我们正在使用的同步代码位于.bat文件中。2014年6月6日上午安装的两个Windows更新(我怀疑这可能是导致任务不再工作的原因)是:

2017-06基于x64系统的Windows Server 2012 R2安全月度质量汇总KB40222726

针对Windows 8、8.1、10和Windows Server 2012、2012 R2、2016 x64版本的Windows恶意软件删除工具-2017年6月KB890830

REM *** Retry for up to 15 minutes (90 retries @ 10 seconds each)
set retryCount=0

:SyncStart
if %retryCount == 90 goto SyncEnd
set /A retryCount=retryCount + 1

REM *** Resync the system clock
net start w32time
w32tm /resync
if errorlevel 1 goto SyncDelay
if errorlevel 0 goto SyncEnd

:SyncDelay
REM *** If unsuccessful, delay 10 seconds, then retry
choice /n /t:y,10>nul
goto SyncStart

:SyncEnd

批处理文件第行中包含语法错误:

if %retryCount == 90 goto SyncEnd
环境变量的值必须在使用标准扩展时用%VariableName%引用,而不仅仅是在批处理文件或批处理文件参数%0、%1、…、中分别用%VariableName(如cmd上的FOR循环变量%I)或%VariableName!易变名字!在这里不需要延迟扩展

代码也可以进行优化:

@echo off
REM *** Retry for up to 15 minutes (90 retries @ 10 seconds each)
set retryCount=0

:SyncStart
if %retryCount% == 90 goto :EOF
set /A retryCount+=1

REM *** Resync the system clock
%SystemRoot%\System32\net.exe start w32time
%SystemRoot%\System32\w32tm.exe /resync
if not errorlevel 1 goto :EOF

REM *** If unsuccessful, delay 10 seconds, then retry
%SystemRoot%\System32\timeout.exe 10 /nobreak
goto SyncStart
那么,代码可以进一步优化:

@echo off
REM *** Retry for up to 15 minutes (90 retries @ 10 seconds each)
set retryCount=0
%SystemRoot%\System32\net.exe start w32time
%SystemRoot%\System32\timeout.exe 5 /nobreak

:SyncTime
%SystemRoot%\System32\w32tm.exe /resync
if not errorlevel 1 goto :EOF

REM *** If unsuccessful, delay 10 seconds, then retry
set /A retryCount+=1
if not %retryCount% == 90 %SystemRoot%\System32\timeout.exe 10 /nobreak & goto SyncTime
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

回声/? 转到/? 如果/? 净/? 净启动/? 雷姆/? 集/? 超时/? w32tm/?
请阅读Microsoft支持文章。

时区绝对不会因安装应用程序或安全更新而改变。但时区设置与帐户相关。因此,可能为您的帐户配置的是时区EST,但为系统帐户配置的是UTC时区。可以使用管理员权限将当前用户的地区/国家、日期/时间/货币格式等、语言键盘、语音识别等以及时区设置、夏令时调整等复制到新帐户和系统帐户的默认用户帐户。你应该利用这种可能性,这是一个很好的答案。非常感谢。我应该指出我没有写命令,这是我的能力范围之外的。我只是假设它坏了,因为它工作了8个多月,直到2014年6月。由于它在服务器安装更新后立即停止工作,我只是假设它们是相关的。您的解决方案一直在工作,但现在它已停止。我已经包括了一张日志图片,显示同步任务已完成,但没有正确更新时间。有没有关于是什么导致它停止工作的想法?批处理文件必须以管理员的提升权限执行。批处理文件只向Windows时间管理发送消息,以强制与配置的时间源重新同步。配置的时间源通常是Microsoft的NTP服务器,时间同步是通过Windows的内置NTP客户端完成的。因此,您必须检查配置的NTP服务器是否正常工作,并且不拒绝NTP客户端的重新同步请求。请参阅Windows注册表中的HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\W32时间,并阅读有关此注册表项的信息。