Created a script to dump out the contents of Add/Remove Programs.
The output looks like this:
The VBscript follows below the break:
On Error Resume Next      
Dim strHost,sAddRemTmp,iRegRC       
Const strBaseKey = "Software\Microsoft\Windows\CurrentVersion\Uninstall\"    
Const HKeyName_LOCAL_MACHINE = &H80000002       
strHost = "."       
sAddRemTmp = ""       
iRegRC = 0
Set objReg = GetObject("winmgmts://" & strHost & "/root/default:StdRegProv") 
iRegRC = objReg.EnumKey (HKeyName_LOCAL_MACHINE, strBaseKey, arrSubKeys)      
If iRegRC <> 0 Then       
    WScript.Quit       
End If       
For Each strSubKey In arrSubKeys       
    intAddRemRet = objReg.GetStringValue(HKeyName_LOCAL_MACHINE, strBaseKey & strSubKey, "DisplayName", strAddRemValue)       
       If intAddRemRet <> 0 Then       
              intAddRemRet = objReg.GetStringValue(HKeyName_LOCAL_MACHINE, strBaseKey & strSubKey, "QuietDisplayName", strAddRemValue)       
    End If       
      If (strAddRemValue <> "") and (intAddRemRet = 0) Then       
           strAddRemValue = Trim(strAddRemValue)       
        iAddRemRC = objReg.GetStringValue(HKeyName_LOCAL_MACHINE, strBaseKey & strSubKey, "DisplayVersion", sAddRemVersion)       
        If (sAddRemVersion <> "" and sAddRemVersion <> "1") Then       
                 sAddRemTmp = sAddRemTmp + strAddRemValue + vbTab + "Ver: " + sAddRemVersion +VbCrLf       
        Else       
            If sAddRemVersion = "1" Then       
                iAddRemRC2 = objReg.GetStringValue(HKeyName_LOCAL_MACHINE, strBaseKey & strSubKey, "HelpLink", sAddRemVersion)       
               Else       
                iAddRemRC2 = objReg.GetStringValue(HKeyName_LOCAL_MACHINE, strBaseKey & strSubKey, "MoreInfoURL", sAddRemVersion)       
               End If        
            If sAddRemVersion <> "" Then       
                If sAddRemVersion = "1" Then       
                    iAddRemRC3 = InStrRev(sAddRemVersion, "http://support.microsoft.com?kbid=")       
                   Else       
                    iAddRemRC3 = InStrRev(sAddRemVersion, "http://support.microsoft.com/kb/")       
                End If       
                If iAddRemRC3 <> 0 Then       
                       sLen = Len(sAddRemVersion) - 32       
                       sAddRemVersion = "KB" + right(sAddRemVersion,sLen)       
                Else       
                    sAddRemVersion = "MoreInfoURL: " + sAddRemVersion       
                End If       
                   sAddRemTmp = sAddRemTmp + strAddRemValue + vbTab + "Ver: " + sAddRemVersion +VbCrLf       
              Else       
                   sAddRemTmp = sAddRemTmp + strAddRemValue +VbCrLf       
               End If       
           End If       
       End If       
Next
sAddRemTmp = BubbleSort(sAddRemTmp)      
WScript.Echo sAddRemTmp
WScript.Quit      
Function BubbleSort(sAddRemTmp)       
  'cheapo bubble sort       
  Dim aTmp, i, j, temp, bNoSwap       
  aTmp = Split(sAddRemTmp, vbcrlf)  
  For i = UBound(aTmp) - 1 To 0 Step -1       
      bNoSwap = False       
    For j = 0 to i - 1       
      If LCase(aTmp(j)) > LCase(aTmp(j+1)) Then       
        temp = aTmp(j + 1)       
        aTmp(j + 1) = aTmp(j)       
        aTmp(j) = temp       
        bNoSwap = True       
      End If       
    Next       
    If bNoSwap = False Then       
        Exit For       
    End If       
  Next       
  BubbleSort = Join(aTmp, vbcrlf)       
End Function



