heres the WMI script:
Set oLocator=CreateObject("WbemScripting.SWbemLocator"
strNamespace="root\cimv2"
strPC=Inputbox("Enter a computername to query. DO NOT ENTER THE LOCAL COMPUTER NAME!!!"

strUser=""
strPassword=""
Set oSvc=oLocator.ConnectServer(strPC,strNamespace,strUser,strPassword)
for each prod in oSvc.InstancesOf("Win32_Product"

strYr=Left(prod.InstallDate,4)
strMo=Mid(prod.InstallDate,5,2)
strDy=Right(prod.InstallDate,2)
strInstalled=strMo&"/"&strDy&"/"&strYr
msgbox strPC & "," & prod.Name & "," & prod.Vendor & _
"," & prod.Version & "," & strInstalled & "," & DATE
Next
set oSvc=Nothing
set oLocator=Nothing
and heres the registry one:
Dim refRegistry
Const HKEY_LOCAL_MACHINE = &H80000002
Set fso = CreateObject("Scripting.FileSystemObject"

Set fil = fso.CreateTextFile("c:\Test_Installed.txt",True)
strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Set WshShell = WScript.CreateObject("WScript.Shell"
Set refRegistry = getobject("winmgmts:\root\default:stdregprov"
Enumerate "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",refRegistry,0
Set refRegistry = Nothing
'recursive subroutine call
Sub Enumerate(strKey,refRegistry,numLevel)
Dim arrSubKeys
Dim strSubKey
Dim strIndent
Dim i
'prefix output with correct indentation level
strIndent = ""
For i = 0 To numLevel
strIndent = strIndent + " "
Next
'display output
'WScript.Echo strIndent & strKey
'enumerate any subkeys
If refRegistry.EnumKey( _
HKEY_LOCAL_MACHINE, strKey, arrSubKeys) = 0 Then
For Each strSubKey In arrSubKeys
'recursively call ourselves
On Error Resume Next
'WScript.Echo WshShell.RegRead("HKLM\" & strKey & "\" & strSubKey & "\DisplayName"

fil.WriteLine(WshShell.RegRead("HKLM\" & strKey & "\" & strSubKey & "\DisplayName"

)
'txt = txt & WshShell.RegRead("HKLM\" & strKey & "\" & strSubKey & "\DisplayName"

& vbcrlf
'WScript.Echo strSubKey
Next
Else
'WScript.Echo "Unable to enumerate. Sorry."
'WScript.Quit
End If
Jamie Gillespie
Senior IT Technician
South Cheshire College
j-gillespie@s-cheshire.ac.uk