CriticalPoint
CriticalPoint

Reputation: 3

PowerShell to fetch installed programs

I will be hosting a file on a remote server (read-only) and asking people to run the file on their machines to gather installed program information. I want the file to be saved to their Desktop in their user space, so that I can then have them send it to us.

I have the script, but I'm not managing to obtain information from both "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", and "Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" in the same output file. I'm obviously missing something inherently obvious, as PowerShell is clearly able to do this, and I'm asking that someone please save me from my PEBKAC issue!

Thank you in advance, appreciated!

Here is my code;

$computers = "$env:computername"

$array = @()

foreach($pc in $computers){

$computername=$pc

$UninstallKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" 
$UninstallKey="Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"

$reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$computername) 

$regkey=$reg.OpenSubKey($UninstallKey) 

$subkeys=$regkey.GetSubKeyNames() 

Write-Host "$computername"
foreach($key in $subkeys){

    $thisKey=$UninstallKey+"\\"+$key 

    $thisSubKey=$reg.OpenSubKey($thisKey) 

    $obj = New-Object PSObject

    $obj | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $computername

    $obj | Add-Member -MemberType NoteProperty -Name "DisplayName" -Value $($thisSubKey.GetValue("DisplayName"))

    $obj | Add-Member -MemberType NoteProperty -Name "DisplayVersion" -Value $($thisSubKey.GetValue("DisplayVersion"))

    $obj | Add-Member -MemberType NoteProperty -Name "InstallLocation" -Value $($thisSubKey.GetValue("InstallLocation"))

    $obj | Add-Member -MemberType NoteProperty -Name "Publisher" -Value $($thisSubKey.GetValue("Publisher"))

    $array += $obj

    } 

}

$array | Where-Object { $_.DisplayName } | select ComputerName, DisplayName, DisplayVersion, Publisher | export-csv C:\Users\$env:username\Desktop\Installed_Apps.csv

Upvotes: 0

Views: 835

Answers (1)

Eris
Eris

Reputation: 7638

Right now the following two lines set the same variable:

$UninstallKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" 
$UninstallKey="Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"

Use this:

$UninstallKey = @(
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
    'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
)

Then wrap the real logic in:

$UninstallKey | ForEach-Object {
    $regkey=$reg.OpenSubKey($_)

    # the rest of your logic here
}

Upvotes: 1

Related Questions