Last active
July 14, 2016 07:26
-
-
Save nikiink/87b6f735b82165f089bd85b615435a01 to your computer and use it in GitHub Desktop.
With this system you can automatically download windows updates, install them and reboot, and repeat these steps until no other updates are needed. Copy these files in the folder C:\WUA and import the task in scheduler.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cscript "C:\WUA\WUA_SearchDownloadInstall.vbs" >> "C:\WUA\WUA-log.txt" 2>&1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Set updateSession = CreateObject("Microsoft.Update.Session") | |
updateSession.ClientApplicationID = "MSDN Sample Script" | |
Set updateSearcher = updateSession.CreateUpdateSearcher() | |
WScript.Echo "Searching for updates..." & vbCRLF | |
Set searchResult = _ | |
updateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0") | |
WScript.Echo "List of applicable items on the machine:" | |
For I = 0 To searchResult.Updates.Count-1 | |
Set update = searchResult.Updates.Item(I) | |
WScript.Echo I + 1 & "> " & update.Title | |
Next | |
If searchResult.Updates.Count = 0 Then | |
WScript.Echo "There are no applicable updates." | |
WScript.Quit | |
End If | |
WScript.Echo vbCRLF & "Creating collection of updates to download:" | |
Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl") | |
For I = 0 to searchResult.Updates.Count-1 | |
Set update = searchResult.Updates.Item(I) | |
addThisUpdate = false | |
If update.InstallationBehavior.CanRequestUserInput = true Then | |
WScript.Echo I + 1 & "> skipping: " & update.Title & _ | |
" because it requires user input" | |
Else | |
If update.EulaAccepted = false Then | |
WScript.Echo I + 1 & "> note: " & update.Title & _ | |
" has a license agreement that must be accepted:" | |
WScript.Echo update.EulaText | |
WScript.Echo "Do you accept this license agreement? (Y/N)" | |
strInput = "Y" 'WScript.StdIn.Readline | |
WScript.Echo | |
If (strInput = "Y" or strInput = "y") Then | |
update.AcceptEula() | |
addThisUpdate = true | |
Else | |
WScript.Echo I + 1 & "> skipping: " & update.Title & _ | |
" because the license agreement was declined" | |
End If | |
Else | |
addThisUpdate = true | |
End If | |
End If | |
If addThisUpdate = true Then | |
WScript.Echo I + 1 & "> adding: " & update.Title | |
updatesToDownload.Add(update) | |
End If | |
Next | |
If updatesToDownload.Count = 0 Then | |
WScript.Echo "All applicable updates were skipped." | |
WScript.Quit | |
End If | |
WScript.Echo vbCRLF & "Downloading updates..." | |
Set downloader = updateSession.CreateUpdateDownloader() | |
downloader.Updates = updatesToDownload | |
downloader.Download() | |
Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl") | |
rebootMayBeRequired = false | |
WScript.Echo vbCRLF & "Successfully downloaded updates:" | |
For I = 0 To searchResult.Updates.Count-1 | |
set update = searchResult.Updates.Item(I) | |
If update.IsDownloaded = true Then | |
WScript.Echo I + 1 & "> " & update.Title | |
updatesToInstall.Add(update) | |
If update.InstallationBehavior.RebootBehavior > 0 Then | |
rebootMayBeRequired = true | |
End If | |
End If | |
Next | |
If updatesToInstall.Count = 0 Then | |
WScript.Echo "No updates were successfully downloaded." | |
WScript.Quit | |
End If | |
If rebootMayBeRequired = true Then | |
WScript.Echo vbCRLF & "These updates may require a reboot." | |
End If | |
WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)" | |
strInput = "Y" 'WScript.StdIn.Readline | |
WScript.Echo | |
If (strInput = "Y" or strInput = "y") Then | |
WScript.Echo "Installing updates..." | |
Set installer = updateSession.CreateUpdateInstaller() | |
installer.Updates = updatesToInstall | |
Set installationResult = installer.Install() | |
'Output results of install | |
WScript.Echo "Installation Result: " & _ | |
installationResult.ResultCode | |
WScript.Echo "Reboot Required: " & _ | |
installationResult.RebootRequired & vbCRLF | |
WScript.Echo "Listing of updates installed " & _ | |
"and individual installation results:" | |
For I = 0 to updatesToInstall.Count - 1 | |
WScript.Echo I + 1 & "> " & _ | |
updatesToInstall.Item(i).Title & _ | |
": " & installationResult.GetUpdateResult(i).ResultCode | |
Next | |
End If | |
If rebootMayBeRequired = true Then | |
WScript.Echo "Rebooting...." | |
'********************************************************* | |
Set objShell = WScript.CreateObject("WScript.Shell") | |
objShell.Run "C:\WINDOWS\system32\shutdown.exe -r -t 60" | |
'********************************************************* | |
End If |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-16"?> | |
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> | |
<RegistrationInfo> | |
<Date>2016-07-01T12:20:18.7300111</Date> | |
<Author>Nicola</Author> | |
</RegistrationInfo> | |
<Triggers> | |
<BootTrigger> | |
<Enabled>true</Enabled> | |
<Delay>PT30S</Delay> | |
</BootTrigger> | |
</Triggers> | |
<Principals> | |
<Principal id="Author"> | |
<UserId>S-1-5-18</UserId> | |
<RunLevel>HighestAvailable</RunLevel> | |
</Principal> | |
</Principals> | |
<Settings> | |
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy> | |
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries> | |
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries> | |
<AllowHardTerminate>true</AllowHardTerminate> | |
<StartWhenAvailable>false</StartWhenAvailable> | |
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable> | |
<IdleSettings> | |
<StopOnIdleEnd>true</StopOnIdleEnd> | |
<RestartOnIdle>false</RestartOnIdle> | |
</IdleSettings> | |
<AllowStartOnDemand>true</AllowStartOnDemand> | |
<Enabled>true</Enabled> | |
<Hidden>false</Hidden> | |
<RunOnlyIfIdle>false</RunOnlyIfIdle> | |
<WakeToRun>false</WakeToRun> | |
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit> | |
<Priority>7</Priority> | |
</Settings> | |
<Actions Context="Author"> | |
<Exec> | |
<Command>cmd</Command> | |
<Arguments>/C "C:\WUA\WUA_SearchDownloadInstall.bat"</Arguments> | |
</Exec> | |
</Actions> | |
</Task> |
14/07/2016: Log file append mode
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Added log file WUA-log.txt in C:\WUA