After Microsoft Surface arrived in our production environment we have been challenged by time sync issues during OS deployment. The Surface devices were so much off in date and time that they were rejected by the management point resulting in a failed Task Sequence.
Instead of powering up the Surface and adjusting the time manually i wanted to automate this during deployment. I found out that Niall Brady have made a timesync script that can sync the time on the client with a server using NET TIME.
Adding this script to the prestart command on the Boot image will then sync the time with the server specified prior to running the task sequence and voila – problem solved.
' (c) niall@windows-noob.com 2014/7/24
' This script allows you to sync the time in WinPE with a local server using a prestart command
' Fill in the user/password/domain/server details below
' For more guides see http://www.windows-noob.com/forums/index.php?/topic/4045-system-center-2012-configuration-manager-guides/
' for troubleshooting, review the log files created
' net use (to see all existing connections)
' net use * /del /yes (to delete all existing connections)
Option Explicit
DIM ComSpec, WshShell, strUser, strPassword, strDomain, strServer, strCommand, LogFileName, logfile, objFSO, objFile, outFile
Set WshShell = CREATEOBJECT("WScript.Shell")
strUser = "SCCM_DJ"
strPassword = "DJpassw0rd"
strDomain = "domain.com"
strServer = "server"
PrepLogFile
Logtext "Starting logging process."
LogText "sleeping for 15 seconds.."
WScript.Sleep 5000
LogText "Using NET USE to Connect to " & strServer & " as a Domain user.."
strCommand = ComSpec & ("cmd /c net use \\") & strServer & ("\ipc$") & (" ") & strPassword & (" ") & ("/user:") & strDomain & ("\") & strUser & (" ") & (">") & (" ") & ("x:\WinPE_net_use.log")
If WshShell.Run (strCommand, 0, True) = 0 then
LogText "...NET USE connected ok, continuing."
'On Error GoTo 0
else
LogText "...NET USE had an error."
ExitScript -1
end if
LogText "Using the NET TIME command to sync with the Server time.."
strCommand = ("cmd /c net time \\") & strServer & (" /SET /Y") & (">") & (" ") & ("x:\WinPE_net_time.log")
WshShell.Run strCommand
'wait for 5 seconds so the new time is registered before talking to the mp
LogText "Waiting for 5 seconds so the new time is registered before talking to the mp.."
LogText "all done, exiting.."
' =====================================================
' PrepLogFile Subroutine
' =====================================================
Sub PrepLogFile
Dim objFSO
Set wShShell = WScript.CreateObject("WScript.Shell")
LogFileName = "X:\WinPE_TimeSync.log"
'LogFileName = "c:\tmp\WinPE_TimeSync.log"
'On Error Resume Next
Err.Clear
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Err.number <> 0 Then
MsgBox("**** ERROR (" & Err.Number & ") Could not create Logfile - exiting script")
ExitScript 0
Else
If objFSO.FileExists(LogFileName) Then
objFSO.DeleteFile(LogFileName)
End If
Err.Clear
Set logfile = objFSO.CreateTextFile(LogFileName)
If Err.number <> 0 Then
MsgBox "ERROR (" & Err.Number & ") Could not create logfile (File) - exiting script"
ExitScript 0
End If
End If
Err.Clear
'On Error GoTo 0
logfile.writeline "##############################################"
logfile.writeline " windows-noob.com WinPE Time sync Script "
logfile.writeline "##############################################"
End Sub
' =====================================================
' LogText Subroutine
' =====================================================
Sub LogText (TextToLog)
logfile.writeline "" & Now() & " " & TextToLog
End Sub
' =====================================================
' Exit function
' =====================================================
Function ExitScript(iStatus)
if iStatus <> 0 then
set WshShell = WScript.CreateObject("WScript.Shell")
ComSpec = WshShell.ExpandEnvironmentStrings("%COMSPEC%")
WshShell.Run "cmtrace.exe " & LogFileName , 1, False
End if
LogText "All done, exiting successfully"
wscript.quit(iStatus)
End Function
Recent Comments