Re: windows updates list
From: Torgeir Bakken \(MVP\) (Torgeir.Bakken-spam_at_hydro.com)
Date: 12/16/04
- Next message: chris: "Re: xp boot programs"
- Previous message: Byte: "RE: Raid utility is it necessary?"
- In reply to: badgolferman: "windows updates list"
- Next in thread: Alex Nichol: "Re: windows updates list"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 16 Dec 2004 21:35:02 +0100
badgolferman wrote:
> What is the best way to get a list of Windows installed updates of a
> computer. I suppose the Add/Remove programs applet lists service packs
> and hotfixes, but is that the complete list? Where can I find a list
> that I can cut and paste into a spread*** format for inventory
> purposes.
Hi
The VBScript below will list updates installed regardless if Windows
Update history exist or not, and if data exists, also the description,
the user that installed it and installation date.
It is easy to change the output format so it saves the data to a CSV
file you can import directly into a spread*** program.
The updates listing is obtained through the WMI class
Win32_QuickFixEngineering.
Put it in a text file and save it as e.g. ListHotfixes.vbs, to run it,
double click on it or start it like this:
wscript.exe "C:\Scripts\ListHotfixes.vbs"
(assuming you have put the script in the folder C:\Scripts\)
The VBScript will give this type of output:
------------------------------------------
Hotfix report date: 2004-10-19 18:01:19
OS version: Microsoft Windows XP Professional
SP version: Service Pack 2
OS language: English
Hotfixes Identified:
HotFixID: Q282784
Description: Windows XP Hotfix (SP1) [See Q282784 for more information]
InstalledBy:
InstallDate: (none found)
HotFixID: Q282784
Description: Windows XP Hotfix (SP1) [See Q282784 for more information]
InstalledBy: a117296
InstallDate: 10/18/2004
...
------------------------------------------
Script start:
'--------------------8<----------------------
'
' Description: Script that outputs some computer information
' and lists all installed hotfixes including installation date
'
' For Windows 2000 SP3/SP4, Windows XP (all versions) and
' Windows 2003 Server (all versions)
'
' Author: Torgeir Bakken
' Date: 2004-10-19
'
' Revisions
' 2004-12-09: Added support for the new IE update structure in registry
'
Const OpenAsASCII = 0
Const OverwriteIfExist = -1
Set oShell = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sFile = oFSO.GetSpecialFolder(2).ShortPath & "\updates.txt"
Set fFile = oFSO.CreateTextFile(sFile, OverwriteIfExist, OpenAsASCII)
fFile.WriteLine
fFile.WriteLine "Hotfix report date: " & Now & vbCrLf
strComputer = "." ' use "." for local computer
Const 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 Select
intOSLang = objOperatingSystem.OSLanguage
strOSLangHex = Right("000" & Hex(intOSLang), 4)
strOSServicePack = objOperatingSystem.CSDVersion
Next
Set 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 If
fFile.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 value
If 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 If
If IsNull(strInstallDate) Then
strInstallDate = "(none found)"
End If
fFile.WriteLine "InstallDate: " & strInstallDate
fFile.WriteLine ' blank line
End If
Next
fFile.Close
oShell.Run sFile
'--------------------8<----------------------
-- torgeir, Microsoft MVP Scripting and WMI, Porsgrunn Norway Administration scripting examples and an ONLINE version of the 1328 page Scripting Guide: http://www.microsoft.com/technet/scriptcenter/default.mspx
- Next message: chris: "Re: xp boot programs"
- Previous message: Byte: "RE: Raid utility is it necessary?"
- In reply to: badgolferman: "windows updates list"
- Next in thread: Alex Nichol: "Re: windows updates list"
- Messages sorted by: [ date ] [ thread ]