Here is a script I wrote to discover the installed application versions across a list of servers. I have it formatted so it will export a csv file with the information. Note: I also wrote some conditional statements to exclude some Windows update patches/hotfixes/security updates, etc.
To use: "cscript script.vbs" and will generate a results.csv file, also provide a ServerList.txt filled with the list of servers (by line) which you wish to scan the applications and their version numbers.
Here it is:
Dim args,computername, count
count = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("ServerList.txt", ForReading)
Const ForReading = 1
'Read Compare To List
Dim ListToProcess()
i = 0
Do Until objFile1.AtEndOfStream
Redim Preserve ListToProcess(i)
ListToProcess(i) = objFile1.ReadLine
i = i + 1
Loop
objFile1.Close
For Each strLine in ListToProcess
if strLine <> "" then
computername = strLine
Call enumApps(strLine,1)
End if
Next
Function enumApps(computername,flag)
On Error Resume Next
Dim strComputer, strLine
strComputer = computername
Const HKLM = &H80000002
Const strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Wscript.echo "===============" & "Parsing " & computername & "==============="
Dim oReg, arrSubKeys, strProduct, strDisplayName, strVersion
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
oReg.EnumKey HKLM, strKeyPath, arrSubKeys
For Each strProduct In arrSubKeys
oReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayName", strDisplayName
oReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayVersion", strVersion
Dim Filter
If InStr(1, strDisplayName, "", vbTextCompare) > 0 Then
If InStr(1, strDisplayName, "Security", vbTextCompare) = 0 Then
If InStr(1, strDisplayName, "Update", vbTextCompare) = 0 Then
If InStr(1, strDisplayName, "Hotfix", vbTextCompare) = 0 Then
strVersion = Replace(strVersion, ",", "")
strLine = strLine & strDisplayName & "," & strVersion & "," & strComputer & vbCrLf
'Wscript.echo strLine
End If
End If
End If
End If
Next
Dim ObjFso
Dim StrFileName
Dim ObjFile
StrFileName = "results.csv"
Set ObjFso = CreateObject("Scripting.FileSystemObject")
'Opening the file
Set ObjFile = ObjFso.OpenTextFile (StrFileName, 8, True)
If count = 0 then
objFile.WriteLine "Application Name, Version,Server"
count = 1
end if
objFile.WriteLine strLine
objFile.Close
End Function
Fantastic script !!! Makes life easy .
ReplyDeleteThanks Matt