Here's the script I used to audit software installations across our Windows network:
Option Explicit
    On Error Resume Next
Const strInFile = "c:\scripts\audit\hosts.txt"
Const strOutFile = "C:\scripts\audit\results.csv"
Dim arrHosts, objHost, strHost
    Dim objFSO, objTextFile
    Dim i, strNextLine
    Dim fileSystem, objOutFile
    Set arrHosts = CreateObject("Scripting.Dictionary")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(strInFile, 1)
    i = 0
Do Until objTextFile.AtEndOfStream
strNextLine = objTextFile.Readline
arrHosts.Add i, strNextLine
i = i + 1
Loop
    objTextFile.Close
Set objFSO = Nothing
Set fileSystem = WScript.CreateObject("Scripting.FileSystemObject")
Set objOutFile = FileSystem.CreateTextFile(strOutFile, True)
For Each objHost in arrHosts
strHost = arrHosts.Item(objHost)
WScript.Echo(strHost)
objOutFile.Write strHost
    '----------------        using Win32_Product        ----------------
        Dim objWMIService
        Dim arrItems1, arrItems2
        Dim objItem1, objItem2
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strHost & "\root\cimv2")
Set arrItems1 = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
'   Set arrItems2 = objWMIService.ExecQuery("SELECT * FROM Win32_Product")
    '   Set arrItems2 = objWMIService.ExecQuery("SELECT * FROM Win32_Product WHERE (Caption LIKE '%Office%')")
    '   Set arrItems2 = objWMIService.ExecQuery("SELECT * FROM Win32_Product WHERE SoftwareElementID = '{90280409-6000-11D3-8CFE-0050048383C9}'")
        objOutFile.Write(",")
    For Each objItem1 in arrItems1
        Dim strCaption
    strCaption = objItem1.Caption
strCaption = Replace(strCaption, ",", "")
strCaption = Replace(strCaption, ";", ":")
objOutFile.Write strCaption
        WScript.Echo("   " & strCaption)
    '       objOutFile.Write "," & objItem1.Version
    '       objOutFile.Write "," & objItem1.InstallDate
    '       objOutFile.Write "," & objItem1.RegisteredUser
    '       objOutFile.Write "," & objItem1.SerialNumber
    strCaption = vbEmpty
    Next
        '----------------        using the registry        ----------------
        Dim strKey, strSubKey
        Dim objRegistry
        Dim arrSubKeys()
        Dim strDisplayName, strDisplayVersion, strInstallLocation
        Const HKEY_LOCAL_MACHINE = &H80000002
        strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    Set objRegistry = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strHost & "\root\default:StdRegProv")
objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKey, arrSubKeys
    objOutFile.Write(",")
    For Each strSubKey In arrSubKeys
objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey, "DisplayName", strDisplayName
'        objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey, "DisplayVersion", strDisplayVersion
    '        objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKey & "\" & strSubKey, "InstallLocation", strInstallLocation
    If strDisplayName <> 0 Then
strDisplayName = Replace(strDisplayName, ",", "")
strDisplayName = Replace(strDisplayName, ";", ":")
            objOutFile.Write(strDisplayName & ";")
                WScript.Echo("      " & strDisplayName)        
    End If
strDisplayName = vbEmpty
strDisplayVersion = vbEmpty
strInstallLocation = vbEmpty
    Next
    Set objWMIService = Nothing
Set arrItems1 = Nothing
Set arrItems2 = Nothing
Set objRegistry = Nothing
objOutFile.Write vbcrlf
Next
    objOutFile.Close
Set fileSystem = Nothing
  