How to get add remove programs list from 1 device and compare it with other device using

984 Views Asked by At

I have couple of remote devices, where in i need to compare the add remove programs the devices using powershell. how can i do it. Can anyone help me.

Example:-

Need to compare appremove programs from "A Computer" with "A1 Computer" and "B Computer" with "B2 Computer".

1

There are 1 best solutions below

0
On

Microsoft Scripting Guy recommends checking the registry instead of the very slow Win32_Product class. Here's their example where they search a list of computers by name:

$computers = Import-Csv “C:\PowerShell\computerlist.csv”
$array = @()

foreach($pc in $computers){
    $computername=$pc.computername

    #Define the variable to hold the location of Currently Installed Programs
    $UninstallKey=”SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall” 

    #Create an instance of the Registry Object and open the HKLM base key
    $reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey(‘LocalMachine’,$computername) 

    #Drill down into the Uninstall key using the OpenSubKey Method
    $regkey=$reg.OpenSubKey($UninstallKey) 

    #Retrieve an array of string that contain all the subkey names
    $subkeys=$regkey.GetSubKeyNames() 

    #Open each Subkey and use GetValue Method to return the required values for each
    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

And we can compare lists of objects with Compare-Object to see what software is missing from the B PCs:

$ComputerA = $array | Where-Object { $_.ComputerName -like 'ComputerA' } 
$ComputerB = $array | Where-Object { $_.ComputerName -like 'ComputerB' } 

Compare-Object $ComputerA $ComputerB -Property DisplayName,DisplayVersion

DisplayName            DisplayVersion SideIndicator
-----------            -------------- -------------
Notepad++ (64-bit x64) 7.8.9          <=