

最近公司上下班的音响坏了,许多人到点吃饭发现时间慢了两分钟,许多人反馈希望能把时间校正一下,其中就有一个与我关系不错且很漂亮同事,于是立马手动校正了域控服务器的时间,然后下午上班后与她那边确认时间已同步生效。
结果第二天她又向我反馈时间又慢了,我赶紧登录服务器检查,一看时间确实又慢了两钟。经过一翻各种操作,发现原因竟然是因为Windows域控服务器安装在VMware ESXI的虚拟机里面造成的,查看选项虽然关闭了与ESXI主机的时间同步,但看网上说这样可能不彻底,也有可能是时钟震荡造成的时间变慢。
于是翻出了早些年收藏的时间同步工具(运行后无图形界面)进行修改,添加一个循环执行能力,让其能一直在后台循环执行同步,这样就不怕
VMwareESXI主机对Windows域控服务器时间造成时间不准了!
下载地址:
链接:https://share.weiyun.com/lLf5VR5S 密码:y4ys26
程序源码:
#NoTrayIcon#Region ;**** 参数创建于 ACNWrapper_GUI ****#PRE_icon=C:\Windows\System32\SHELL32.dll|-168#PRE_Outfile=TimeSync.exe#PRE_UseX64=n#PRE_Res_Comment=使用参数“/ini”可生成配置文件#PRE_Res_Description=同步时间工具#PRE_Res_Fileversion=2026.7.3.1#PRE_Res_LegalCopyright=By 堕小莫#PRE_Res_requestedExecutionLevel=None#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****#include <Date.au3>If $CmdLine[0] = 1 And $CmdLine[1]= "/ini" ThenFileInstall(".\TimeSync.ini",@ScriptDir & "\TimeSync.ini")MsgBox(0,".*提示*.","生成配置文件成功!",15)ExitEndIfGlobal $ntpServer = IniRead ( @ScriptDir & "\TimeSync.ini", "时间服务器", "服务器网址", "ntp.aliyun.com")Global $jangeTime = IniRead ( @ScriptDir & "\TimeSync.ini", "时间服务器", "间隔分钟", 5)If IsPositiveInt($jangeTime) = False ThenMsgBox(0," 错误提示","请设置间隔时间为正整数!")ExitEndIfWhile 1TimeSync()Sleep(1000*60*$jangeTime)WEndFunc IsPositiveInt($vInput) ; 判断是否为正整数Local $s = StringStripWS($vInput, 3) ; 去除首尾空格; 正则:首位1~9,后面任意数字,整体不能带正负、小数点If StringRegExp($s, "^[1-9]\d*$") ThenReturn TrueEndIfReturn FalseEndFuncFunc TimeSync() ;时间同步函数local $var1,$var2dim $TimeZone=8*60*60 ,$file = FileOpen(@WindowsDir & "\temp\TimeSyncLog.txt", 1)UDPStartup()Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)If @error <> 0 ThenFileWrite($file, @CRLF & @CRLF & " 错误1:连接到服务器失败,请更换服务器后再试。" );MsgBox(0,"","连接服务器失败!")ReturnEndIf$status = UDPSend($socket, MakePacket("1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))If $status = 0 ThenFileWrite($file, @CRLF & @CRLF & " 错误2:发送消息失败!请更换服务器后再试。" );MsgBox(4096, "错误", "连接服务器失败!请更换服务器后再试。")ReturnEndIf$data=""$i=0While $data=""$i+=1$data = UDPRecv($socket, 100)If $i = 5 ThenFileWrite($file, @CRLF & @CRLF & " 错误3:接收消息失败!请更换服务器后再试。" );MsgBox(4096, "错误", "连接服务器失败!请更换服务器后再试。")ReturnEndIfsleep(100)WEndUDPCloseSocket($socket)UDPShutdown()$unsignedHexValue=StringMid($data,83,8); Extract time from packet. Disregards the fractional second.$value=UnsignedHexToDec($unsignedHexValue)$value=$value+$TimeZone$UTC=_DateAdd("s",$value,"1900/01/01 00:00:00")$var1=StringSplit(StringLeft($UTC,10),'/')$var2=StringSplit(StringRight($UTC,8),':')_SetTime($var2[1],$var2[2],$var2[3])_SetDate($var1[3],$var1[2],$var1[1])FileWrite($file, @CRLF & @CRLF & " 成功提示:NTP服务器时间同步成功,当前系统时间为:" & $UTC )FileClose($file);MsgBox(0,"提示","NTP服务器时间同步成功,当前系统时间为: "&$UTC)EndFuncFunc MakePacket($d)Local $p=""While $d$p&=Chr(Dec(StringLeft($d,2)))$d=StringTrimLeft($d,2)WEndReturn $pEndFuncFunc UnsignedHexToDec($n)$ones=StringRight($n,1)$n=StringTrimRight($n,1)Return dec($n)*16+dec($ones)EndFunc


夜雨聆风