' Schedule Computer Reboot v3.9
' Programmed by WindowsStar - Copyright (c) 2008-2010
'
'"netsh firewall set service RemoteAdmin enable" (Must be run at the command prompt on Window XP or Server 2003 before this will work)
' Must enable "Windows Management Instrumentation (WMI)" and "File and Printer Sharing" on Vista or Server 2008 Firewall before this will work)
' --------------------------------------------------------
Set Login = Wscript.CreateObject("WSHLogin.clsLogin")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set WShNetwork = CreateObject("WScript.Network")
Set fso = CreateObject("Scripting.FileSystemObject")
Set objEnv = WshShell.Environment("Process")
DSTOffset = "420"
Title = "Computer Name"
Message = "Name of computer to reboot." & vbLF & vbLF & "Leave blank or press cancel to quit."
strComputer = UCase(InputBox(Message, Title, WShNetwork.ComputerName))
If strComputer = "" Then Wscript.quit
Title = "Reboot Time"
Message = "Enter reboot time in military format." & vbLF & vbLF & "Sample: 05:45" & vbLF & "Sample: 14:45" & vbLF & vbLF & "Leave blank or press cancel to quit."
strTime = InputBox(Message, Title, "")
If strTime = "" Then Wscript.quit
strNormalTime = strTime
strTime = Left(Replace(strTime,":","") & "0000",6)
If Left(strTime,2) > 23 Then WScript.Echo "Incorrect time entered! Script Terminated!" : WScript.Quit
If Mid(strTime,3,2) > 59 Then WScript.Echo "Incorrect time entered! Script Terminated!" : WScript.Quit
'On Error Resume Next
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
For Each objItem In colItems
If objItem.DaylightInEffect = True Then DSTOffset = "360"
Next
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
If LCase(InStr(objItem.Caption,"Windows XP")) or LCase(InStr(objItem.Caption,"Vista")) Then
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create ("shutdown.exe -r -f -t 05", "********" & strTime & ".000000-" & DSTOffset, False , , , False, JobId)
End If
Next
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
If LCase(InStr(objItem.Caption,"Windows 2000")) or LCase(InStr(objItem.Caption,"Server 2003")) Then
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create ("shutdown.exe /r /f /t 05", "********" & strTime & ".000000-" & DSTOffset, False , , , False, JobId)
End If
Next
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
If LCase(InStr(objItem.Caption,"Windows 7")) or LCase(InStr(objItem.Caption,"Server 2008 R2")) Then
Set objProcess = objWMIService.Get("Win32_Process")
strCommand = "SCHTASKS /Create /SC ONCE /TN Scheduled-Reboot /F /NP /RL HIGHEST /TR " & Chr(34) & "shutdown.exe -r -f -t 05" & Chr(34) & " /ST " & strNormalTime
errReturn = objProcess.Create(strCommand, null, null, intProcessID)
End If
Next
If errReturn <> 0 Then WScript.Echo "Reboot NOT Scheduled! " & Err.Number : WScript.Quit
If Err.Number <> 0 Then WScript.Echo "Reboot NOT Scheduled! " & Err.Number : WScript.Quit
WShNetwork.MapNetworkDrive "", "\\" & strComputer & "\IPC$"
If fso.FileExists ("\\" & strComputer & "\C$\Windows\Tasks\At1.job") Then fso.MoveFile "\\" & strComputer & "\C$\Windows\Tasks\At1.job", "\\" & strComputer & "\C$\Windows\Tasks\Scheduled Reboot.job"
If fso.FileExists ("\\" & strComputer & "\C$\Winnt\Tasks\At1.job") Then fso.MoveFile "\\" & strComputer & "\C$\Winnt\Tasks\At1.job", "\\" & strComputer & "\C$\Winnt\Tasks\Scheduled Reboot.job"
WShNetwork.RemoveNetworkDrive "\\" & strComputer & "\IPC$"
On Error Resume Next
fso.DeleteFile(objEnv("UserProfile") & "\Recent\*.lnk"), True
fso.DeleteFile(objEnv("UserProfile") & "\AppData\Roaming\Microsoft\Windows\Recent\*.lnk"), True
WshShell.Popup " Done!",5,"Script Message"