Solved

VBS Windows Update script

Posted on 2011-02-17
5
1,175 Views
Last Modified: 2012-06-27
I am writing a VBS script for use with MDT. This script is supposed to pull down and install all available windows updates for Windows XP clients. Occasionally I receive error 0x80240016, which if I understand correctly indicates that a reboot is necessary before a given update will install. My question is how can I handle this gracefully, without a reboot for every single update the requests one? As it stands my script errors out by throwing 0x80240016.
Based on my logging it looks like the code is stopping on the line 'Set installationResult = installer.Install()" line.
Function DoUpdate()

	Set updateSession = CreateObject("Microsoft.Update.Session")
	Set updateSearcher = updateSession.CreateupdateSearcher()
	Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
	Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
	Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

	For I = 0 to searchResult.Updates.Count-1
		Set update = searchResult.Updates.Item(I)
		updatesToDownload.Add(update)
		Set downloader = updateSession.CreateUpdateDownloader() 
		downloader.Updates = updatesToDownload
		downloader.Download()
		updatesToDownload.Clear()

		If update.IsDownloaded = true Then
			updatesToInstall.Add(update)	
			Set installer = updateSession.CreateUpdateInstaller()
			installer.Updates = updatesToInstall
			Set installationResult = nothing 
			Set installationResult = installer.Install()
			updatesToInstall.Clear()
			
			If ( installationResult is nothing OR installationResult.ResultCode <> 2 OR installationResult.RebootRequired ) Then
				oEnvironment.Item("SMSTSRebootRequested") = "true"
				oEnvironment.Item("SMSTSRetryRequested") = "true"
				If ContinueReboot( update.Title ) Then
					' Reboots aren't generally allowed from standard Windows Updates
					oLogging.CreateEntry "Immediate Reboot Allowed for " & update.Title, LogTypeInfo
					Exit For
				Else
					oLogging.CreateEntry "Immediate Reboot denied for " & update.Title, LogTypeInfo
				End If
			End If
		End If
	Next

End Function

Open in new window

0
Comment
Question by:timbrigham
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 47

Assisted Solution

by:Donald Stewart
Donald Stewart earned 100 total points
ID: 34920997
It appears that error means something other than a pending reboot



Error message when you try to install updates from the Windows Update Web site or from the Microsoft Update Web site: "0x80240016"

http://support.microsoft.com/kb/957307
0
 
LVL 65

Accepted Solution

by:
RobSampson earned 400 total points
ID: 34922882
Hi, if the article Dave pointed to is correct, then perhaps you can detect the error, and restart wuauserv, and retry the install....

Regards,

Rob.
Function DoUpdate()

	Set updateSession = CreateObject("Microsoft.Update.Session")
	Set updateSearcher = updateSession.CreateupdateSearcher()
	Set searchResult = updateSearcher.Search("IsInstalled=0 and Type='Software'")
	Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")
	Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

	For I = 0 to searchResult.Updates.Count-1
		Set update = searchResult.Updates.Item(I)
		updatesToDownload.Add(update)
		Set downloader = updateSession.CreateUpdateDownloader() 
		downloader.Updates = updatesToDownload
		downloader.Download()
		updatesToDownload.Clear()

		If update.IsDownloaded = true Then
			updatesToInstall.Add(update)	
			Set installer = updateSession.CreateUpdateInstaller()
			installer.Updates = updatesToInstall
			Set installationResult = nothing 
			On Error Resume Next
			Set installationResult = installer.Install()
			If Err.Number = 80240016 Then
				oLogging.CreateEntry "Restarting wuauserv service and retrying install of " & update.Title, LogTypeInfo
				Set objShell = CreateObject("WScript.Shell")
				objShell.Run "net stop wuauserv", 0, True
				WScript.Sleep 3000
				objShell.Run "net start wuauserv", 0, True
				WScript.Sleep 3000
				Err.Clear
				On Error Resume Next
				Set installationResult = installer.Install()
			End If
			updatesToInstall.Clear()
			
			If ( installationResult is nothing OR installationResult.ResultCode <> 2 OR installationResult.RebootRequired ) Then
				oEnvironment.Item("SMSTSRebootRequested") = "true"
				oEnvironment.Item("SMSTSRetryRequested") = "true"
				If ContinueReboot( update.Title ) Then
					' Reboots aren't generally allowed from standard Windows Updates
					oLogging.CreateEntry "Immediate Reboot Allowed for " & update.Title, LogTypeInfo
					Exit For
				Else
					oLogging.CreateEntry "Immediate Reboot denied for " & update.Title, LogTypeInfo
				End If
			End If
		End If
	Next

End Function

Open in new window

0
 
LVL 47

Expert Comment

by:Donald Stewart
ID: 34922902
Who's Dave ?  :^)
0
 
LVL 65

Expert Comment

by:RobSampson
ID: 34922946
Sorry, my bad....somewhere along the line I thought I saw that was your name....I apologise if I'm wrong...
0
 
LVL 1

Author Closing Comment

by:timbrigham
ID: 34945422
Thanks gentlemen. The examples given for the error handling were just the ticket.
0

Featured Post

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will help you understand what HashTables are and how to use them in PowerShell.
The Nano Server Image Builder helps you create a custom Nano Server image and bootable USB media with the aid of a graphical interface. Based on the inputs you provide, it generates images for deployment and creates reusable PowerShell scripts that …
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question