Sunteți pe pagina 1din 3

D:\Codigo Fuente\Windows Scripting Hosting\Terminado\set_system_time_to_us_naval_observatory.

vbs

'~~Author~~. Bill James MS-MVP


'~~Email_Address~~. wgjames@mvps.org
'~~Script_Type~~. vbscript
'~~Sub_Type~~. SystemAdministration
'~~Keywords~~. microsoft.xmlhttp, ActiveTimeBias, getResponseHeader, time
'zone, set time
'~~Comment~~.
'An End-User VBScript tool to adjust local system time if off by 1 second
'or more compared to US Naval Observatory web server. Minimum system
'requirements Windows 95 or Windows NT 4.0 with Internet Explorer 5.
'~~Script~~.
'SetTime2.vbs - Adjusts system time if off by 1 second or more.
' Bill James - wgjames@mvps.org - rev 28 Apr 2000
'Credit to Michael Harris for original concept.
'
Option Explicit
Dim ws, strTitle
Set ws = CreateObject("WScript.Shell")
strTitle = "SetTime.vbs Bill James"
'
'Check system compatibility.
Dim http
Call ChkCompat
'
'Read time zone offset hex value from Registry.
Dim TimeOffset, HexVal
TimeOffset = ws.RegRead("HKLM\SYSTEM\CurrentControlSet\" & _
"Control\TimeZoneInformation\ActiveTimeBias")
'Reg value format varies between Win9x and NT
If IsArray(TimeOffset) Then
'Win9x uses a reversed 4 element array of Hex values.
HexVal = Hex(TimeOffset(3)) & Hex(TimeOffset(2)) & _
Hex(TimeOffset(1)) & Hex(TimeOffset(0))
Else 'Must be NT system.
HexVal = Hex(TimeOffset)
End If
'Convert to hours of time zone offset.
TimeOffset = - CLng("&H" & HexVal) / 60
'
'Get time from server. Recheck up to 5 times if lagged.
Dim n, timechk, localdate, lag, gmttime
For n = 0 to 4
'Fetch time page from US Naval Observatory web page.
'We don't actually need or use the page contents.
http.open "GET","http://tycho.usno.navy.mil" & _
"/cgi-bin/timer.pl"& now(),false
'Check response time to avoid invalid errors.
-1-

mircoles, 15 de junio de 2016 01:41 p.m.

D:\Codigo Fuente\Windows Scripting Hosting\Terminado\set_system_time_to_us_naval_observatory.vbs

timechk = Now
http.send
localdate = Now
lag = DateDiff("s", timechk, localdate)
'
'Key concept for script is reading header date.
gmttime = http.getResponseHeader("Date")
'
'Trim results to valid date format.
gmttime = right(gmttime, len(gmttime) - 5)
gmttime = left(gmttime, len(gmttime) - 3)
'
'If less than 2 seconds lag we can use the results.
If lag < 2 Then Exit For
Next
'
'If still too much lag after 5 attemps, quit.
If n = 4 then
ws.Popup "Unable to establish a reliable connection " & _
"with time server. This could be due to the " & _
"time server being too busy, your connection " & _
"already in use, or a poor connection." & vbcrlf & _
vbcrlf & "Please try again later.", 5, strTitle
Cleanup
End If
'
'Time and date error calculations.
Dim remotedate, diff, newnow, newdate, newtime, ddiff, sdiff
'Add local time zone offset to GMT returned from USNO server.
remotedate = DateAdd("h", timeoffset, gmttime)
'Calculate seconds difference betweed remote and local.
diff = DateDiff("s",localdate,remotedate)
'Adjust for difference and lag to get actual time.
newnow = DateAdd("s", diff + lag, now)
'Split out date and calculate any difference.
newdate = DateValue(newnow)
ddiff = DateDiff("d", Date, newdate)
'Split out time.
newtime = TimeValue(newnow)
'Convert time to 24 hr format required for OS compatibility.
newtime = Right(0 & Hour(newtime), 2) & ":" & _
Right(0 & Minute(newtime), 2) & ":" & _
Right(0 & Second(newtime), 2)
'Calculate time difference.
sdiff = DateDiff("s", time, newtime)
'
'If off by 1 or more seconds, adjust local time
Dim tmsg
If sdiff < 2 and sdiff > -2 Then
tmsg = "System is accurate to within " & _
"1 second. System time not changed."
Else
'Run DOS Time command in hidden window.
-2-

mircoles, 15 de junio de 2016 01:41 p.m.

D:\Codigo Fuente\Windows Scripting Hosting\Terminado\set_system_time_to_us_naval_observatory.vbs

ws.Run "%comspec% /c time " & newtime,


tmsg = "System time off by " & sdiff &
" seconds. System time changed
CDate(newtime)
End If
'
'If date off, change it.
Dim dmsg
If ddiff <> 0 Then
ws.Run "%comspec% /c date " & newdate,
dmsg = "Date off by " & ddiff & _
" days. System date changed to
newdate & vbcrlf & vbcrlf
End If

0
_
to " & _

0
" & _

'Show the changes


ws.Popup dmsg & tmsg, 5, strTitle
'
Call Cleanup
'
Sub ChkCompat
On Error Resume Next
Set http = CreateObject("microsoft.xmlhttp")
If Err.Number <> 0 Then
ws.Popup "Process Aborted!" & vbcrlf & vbcrlf & _
"Minimum system requirements to run this " & _
"script are Windows 95 or Windows NT 4.0 " & _
"with Internet Explorer 5.", , strTitle
Cleanup
End If
End Sub
'
Sub Cleanup
Set ws = Nothing
Set http = Nothing
WScript.Quit
End Sub

-3-

mircoles, 15 de junio de 2016 01:41 p.m.

S-ar putea să vă placă și