乐于分享
好东西不私藏

时间同步工具分享(含Au3源码)

时间同步工具分享(含Au3源码)

    最近公司上下班的音响坏了,许多人到点吃饭发现时间慢了两分钟,许多人反馈希望能把时间校正一下,其中就有一个与我关系不错且很漂亮同事,于是立马手动校正了域控服务器的时间,然后下午上班后与她那边确认时间已同步生效。

    结果第二天她又向我反馈时间又慢了,我赶紧登录服务器检查,一看时间确实又慢了两钟。经过一翻各种操作,发现原因竟然是因为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" Then 	FileInstall(".\TimeSync.ini",@ScriptDir & "\TimeSync.ini")	MsgBox(0,".*提示*.","生成配置文件成功!",15)	ExitEndIfGlobal $ntpServer = IniRead ( @ScriptDir & "\TimeSync.ini""时间服务器""服务器网址""ntp.aliyun.com"Global $jangeTime = IniRead ( @ScriptDir & "\TimeSync.ini""时间服务器""间隔分钟"5If IsPositiveInt($jangeTime) = False Then 	MsgBox(0,"  错误提示","请设置间隔时间为正整数!")	Exit	EndIfWhile 1	TimeSync()	Sleep(1000*60*$jangeTime)WEndFunc IsPositiveInt($vInput)		; 判断是否为正整数    Local $s = StringStripWS($vInput3) ; 去除首尾空格    ; 正则:首位1~9,后面任意数字,整体不能带正负、小数点    If StringRegExp($s"^[1-9]\d*$") Then        Return True    EndIf    Return FalseEndFuncFunc TimeSync()		;时间同步函数local $var1,$var2	dim $TimeZone=8*60*60 ,$file = FileOpen(@WindowsDir & "\temp\TimeSyncLog.txt"1)	UDPStartup()	Dim $socket = UDPOpen(TCPNameToIP($ntpServer), 123)	If @error <> 0 Then		FileWrite($file,  @CRLF  & @CRLF & "  错误1:连接到服务器失败,请更换服务器后再试。" )		;MsgBox(0,"","连接服务器失败!")		Return	EndIf$status = UDPSend($socket, MakePacket("1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"))	If $status = 0 Then		FileWrite($file,  @CRLF & @CRLF & "  错误2:发送消息失败!请更换服务器后再试。" )		;MsgBox(4096"错误""连接服务器失败!请更换服务器后再试。")		Return	EndIf$data=""$i=0	While $data=""$i+=1$data = UDPRecv($socket100)		If $i = 5 Then			FileWrite($file@CRLF & @CRLF &  "  错误3:接收消息失败!请更换服务器后再试。" )			;MsgBox(4096"错误""连接服务器失败!请更换服务器后再试。")			Return		EndIfsleep(100)	WEnd	UDPCloseSocket($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)    WEnd    Return $pEndFuncFunc UnsignedHexToDec($n)    $ones=StringRight($n,1)    $n=StringTrimRight($n,1)    Return dec($n)*16+dec($ones)EndFunc