Windows : List Installed Updates
The following vbScript will list all installed updates on a host, the script can also be run against another system by changing the “.” to “computername“. I used this to help with a recent audit of our systems and found itsaved a lot of time!
Const OpenAsASCII = 0
Const OverwriteIfExist = -1Set oShell = CreateObject(“WScript.Shell”)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)strComputer = “.”
sFile = “C:\” & strComputer & “_updates.txt”
Set fFile = oFSO.CreateTextFile(sFile, OverwriteIfExist, OpenAsASCII)fFile.WriteLine
fFile.WriteLine “Hotfix report date: ” & Now & vbCrLfConst HKLM = &H80000002
‘On Error Resume Next
Set objWMIService = GetObject(“winmgmts:” _
& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)Set colSettings = objWMIService.ExecQuery _
(“Select * from Win32_OperatingSystem”)‘ get general info about the OS
‘ Caption value for different OS:
‘ Microsoft Windows 2000 …
‘ Microsoft Windows XP …
‘ Microsoft(R) Windows(R) Server 2003, ….. Edition
For Each objOperatingSystem in colSettings
strOSCaption = objOperatingSystem.Caption
Select Case True
Case InStr(1, strOSCaption, “windows 2000”, vbTextCompare) > 0
strOS = “Windows 2000”
Case InStr(1, strOSCaption, “windows xp”, vbTextCompare) > 0
strOS = “Windows XP”
Case InStr(1, strOSCaption, “windows(r) server 2003”, vbTextCompare) > 0
strOS = “Windows Server 2003”
End SelectintOSLang = objOperatingSystem.OSLanguage
strOSLangHex = Right(“000” & Hex(intOSLang), 4)
strOSServicePack = objOperatingSystem.CSDVersion
NextSet objReg = GetObject(“WinMgmts:{impersonationLevel=impersonate}!//” _
& strComputer & “/root/default:StdRegProv”)strOSLanguage = “Unknown” ‘ Init value
strKeyPath = “SOFTWARE\Classes\MIME\Database\Rfc1766”
strValueName = strOSLangHex
objReg.GetStringValue HKLM, strKeyPath, strValueName, strOSLanguage‘ remove unnecessary stuff
arrOSLanguage = Split(strOSLanguage, “;”)
strOSLanguage = arrOSLanguage(UBound(arrOSLanguage))
If Instr(strOSLanguage, “(“) > 0 Then
arrOSLanguage = Split(strOSLanguage, “(“)
strOSLanguage = Trim(arrOSLanguage(0))
End IffFile.WriteLine “OS version: ” & strOSCaption
fFile.WriteLine “SP version: ” & strOSServicePack
fFile.WriteLine “OS language: ” & strOSLanguage‘ start enumeration of hotfixes
fFile.WriteLine vbCrLf & “Hotfixes Identified:” & vbCrLf
strRegBaseUpdOS = “SOFTWARE\Microsoft\Updates\” & strOS
strRegBaseUpdIE = “SOFTWARE\Microsoft\Updates\Internet Explorer 6\SP1\”Set colItems = objWMIService.ExecQuery _
(“Select * from Win32_QuickFixEngineering”,,48)For Each objItem in colItems
If objItem.HotFixID “File 1” Then
fFile.WriteLine “HotFixID: ” & objItem.HotFixID
fFile.WriteLine “Description: ” & objItem.Description
fFile.WriteLine “InstalledBy: ” & objItem.InstalledBy
strInstallDate = Null ‘ init valueIf InStr(1, objItem.HotFixID, “-IE6SP1-“, vbTextCompare) > 0 Then
strRegKey = strRegBaseUpdIE & objItem.HotFixID
objReg.GetStringValue HKLM, strRegKey, _
“InstalledDate”, strInstallDate
ElseIf objItem.ServicePackInEffect “” Then
strRegKey = strRegBaseUpdOS & “\” & objItem.ServicePackInEffect _
& “\” & objItem.HotFixID
objReg.GetStringValue HKLM, strRegKey, _
“InstalledDate”, strInstallDate
End IfIf IsNull(strInstallDate) Then
strInstallDate = “(none found)”
End If
fFile.WriteLine “InstallDate: ” & strInstallDate
fFile.WriteLine ‘ blank line
End If
NextfFile.Close
oShell.Run sFile