Ok here it is.

Heres a short UDF I wrote for testing purposes. All it does is collects the install info from another machine and then places the file in a directory. Once I have this thing setup for a logon script I'll change a few parts of it. If you look in the output file you'll notice it's all one line. I did this to make the parsing script faster. Instead of doing multiple readlines, it will only do one then split the output into an array.

code:
Break on
Function Software(optional $Computer,optional $LogPath)
If $computer = "" $computer = @wksta EndIf
Dim $programs
Dim $Subkeys
$index = 0
While @error = 0
ReDim preserve $subkeys[Ubound($subkeys)+1]
$index = $index+1
$subkeys[Ubound($subkeys)] = EnumKey("\\$Computer\HKLM\SOFTWARE\
Microsoft\Windows\CurrentVersion\Uninstall",$index)
Loop
$nul = ReDirectOutput ("$logpath$computer.log",1)
For Each $key in $subkeys
$Displayname = ReadValue ("\\$Computer\HKLM\SOFTWARE\Microsoft\
Windows\CurrentVersion\Uninstall\$key","Displayname")
If $Displayname <> ""
ReDim preserve $programs[Ubound ($programs)+1]
$programs[Ubound($programs)] = $Displayname
EndIf
Next
join($programs,"~*~")
$nul = ReDirectOutput("")
EndFunction

Here is the actual script that I'll run locally. You'll need to change the $DATABASE and $loggpath variables to point to where ever you want. You'll also need to create an access database with one table called TBL_PROGRAM. In the table there should be two columns, first "Computer" second "Program". I adjusted the field size of "program" to 100 because I was getting errors with the default 50.

Props to Breaker since I only modified his script. Also, I haven't looked into it but this script won't work with 4.10, I'm using 4.02 to run it.
code:
$=SetOption("WrapAtEOL","On")
$DATABASE = "\\yourcomputer\loggs\inventory.mdb";"
$DSN="Driver={Microsoft Access Driver (*.mdb)}; DBQ=$DATABASE"
$Connection = CreateObject("ADODB.Connection")
$Command = CreateObject("ADODB.Command")
$Recordset = CreateObject("ADODB.Recordset")
If $Connection
? "Connected"
$Connection.ConnectionString = $DSN
$Connection.Open()
$Command.ActiveConnection = $Connection
$Recordset.CursorType = 3
$Recordset.LockType = 3
$Recordset.ActiveCommand = $Command

$loggpath = "\\yourcomputer\loggs"
$file = Dir("$loggPath\*.log")
While $file <> "" AND @error = 0
$computer = SubStr($file,1,InStr($file,".log")-1)
$nul = Open(1,"$loggpath\$file") If @error <> 0 ?@serror Exit EndIf
$ProgArray = ReadLine(1) If @error <> 0 ?@serror Gosub End EndIf
$ProgArray = Split($ProgArray,"~*~")
For Each $program in $ProgArray
$CHECK_ENTRY_PROGRAM = "SELECT * FROM TBL_PROGRAM WHERE COMPUTER=
'$computer' AND PROGRAM='$program';"
$Command.CommandText = $CHECK_ENTRY_PROGRAM
$Recordset.Open($Command)
If $Recordset.RecordCount < 1
? "adding new entry record $program"
$Recordset.AddNew ?@SERROR
$Recordset.Fields("Computer").Value = "$computer" ?@SERROR
$Recordset.Fields("Program").Value = "$program" ?@SERROR
EndIf
$Recordset.Update
$Recordset.Close()
Next
?"$computer Completed Sucussfully"
:End
$nul=Close(1)
$file = Dir()
Loop
$Connection.Close()
$Connection = 0
$Recordset = 0
$Command = 0
Else
Goto error
EndIf
:end
Exit 321
:error
Exit

I think I may just create a gui using kixform to do queries instead of using an access form.

Hope you find some use for this.

Edited code to keep it from extending the width.

[ 30. August 2002, 15:12: Message edited by: Vig ]