Jump to content
Sign in to follow this  
havokex

Software Query

Recommended Posts

havokex

Hello,

I've got a script which i got from this forum that allows me to query machines on the network and returns a list of programs installed on that system. However when I try to query a Windows 7 machine the script just stops without returning anything. Is there something I need to do different for windows 7?

Here's the script:

#include <Array.au3>
#include <GUIConstantsEx.au3>
Local $strComputer, $strInput

Do 
$strComputer = (InputBox("List software","Enter COMPUTER NAME to query list of installed programs."))
If $strComputer <> '' Then 
$strInput = 1
EndIf
Until $strInput = 1

$return = _SoftwareInfo()
_ArrayDisplay($return, "Installed Programs")

Func _SoftwareInfo($computer = $strComputer)
Local $Count = 1

If $computer <> '' Then $computer = '\\' & StringReplace($computer, '\', '') & '\'
Local Const $regkey = $computer & 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'

While 1
$key = RegEnumKey ($regkey, $Count)
If @error <> 0 then ExitLoop
$line = RegRead ($regkey & '\' & $key, 'Displayname')
$line = StringReplace ($line, ' (remove only)', '')

If $line <> '' Then
If Not IsDeclared('avArray') Then Dim $avArray[1]
ReDim $avArray[UBound($avArray) + 1]
$avArray[UBound($avArray) - 1] = $line 
EndIf
$Count = $Count + 1
WEnd

If Not IsDeclared('avArray') Or Not IsArray($avArray) Then
Return(SetError(1, 0, '')) 
Else
$avArray[0] = UBound($avArray) - 1
Return(SetError(0,0, $avArray))
EndIf
EndFunc

Thanks in advance.

Share this post


Link to post
Share on other sites
FlyinRiz

Might have something to do with permissions or maybe a 64bit issue...it might be HKLM64 instead of HKLM. Not sure.

Share this post


Link to post
Share on other sites
havokex

I checked the registry on the windows 7 machines(it is 64bit) but the key is still HKLM in there.

Share this post


Link to post
Share on other sites
havokex

So i found the solution to the problem. Didn't have to change anything in the script. Remote Registry Services was not started on the Win7 machine. Once that service was started the script ran fine.

Share this post


Link to post
Share on other sites
Danny35d

So i found the solution to the problem. Didn't have to change anything in the script. Remote Registry Services was not started on the Win7 machine. Once that service was started the script ran fine.

Also for a 64bit Windows OS you need to check HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall register key. I use the script below, it give you an array of installed software from a 32bit or 64bit.

#include <Array.au3>

$List = _SoftwareList()
_ArrayDisplay($List)

Func _SoftwareList($RemoteComputer = '')
    $SoftwareList = ''
    Local $RegRootArch[2] = ["HKLM\SOFTWARE", "HKLM64\SOFTWARE"]
    Local $RegPath = "\Microsoft\Windows\CurrentVersion\Uninstall"

    If @OSArch = "X64" Then $RegRootArch[0] &= "\Wow6432Node"
    For $RegRoot In $RegRootArch
        $RegCount = 0
        If $RemoteComputer <> '' Then $RegRoot = '\\' & StringReplace($RemoteComputer, '\', '') & '\' & $RegRoot
        While 1
            $RegCount += 1
            $RegKey = RegEnumKey($RegRoot & $RegPath, $RegCount)
            If @error <> 0 Then ExitLoop
            $ThisRegValue = RegRead($RegRoot & $RegPath & '\' & $RegKey, 'Displayname')
            If $ThisRegValue <> '' Then
                $ThisRegValue = StringReplace($ThisRegValue, ' (remove only)', '')
                $SoftwareList &= $ThisRegValue & '|'
            EndIf
        WEnd
        If @OSArch = "X86" Then Return (StringSplit(StringTrimRight($SoftwareList, 1), '|'));    <== We are done if OS Arch is x86
    Next
    Return (StringSplit(StringTrimRight($SoftwareList, 1), '|'))
EndFunc   ;==>_SoftwareList

AutoIt Scripts:NetPrinter - Network Printer UtilityRobocopyGUI - GUI interface for M$ robocopy command line

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×