This script generates a list by querying the registry and returning the installed programs of a local or remote computer.

 

Version 1.0

Version 1.1

Version 1.2

 

Version 1.2.1

 

Version 1.3 - Added new parameters

 

Version 1.4 - Feature update

 

Version 1.4.1 - Minor improvement

 

Version 1.5 - Feature update

 

 

PowerShell
Edit|Remove
. .\Get-RemoteProgram.ps1

Load the function into memory by dot-sourcing the script file this makes the Get-RemoteProgram function available in your current session of PowerShell

 

PowerShell
Edit|Remove
Get-RemoteProgram
This command will generate a list of installed programs on local machine.
PowerShell
Edit|Remove
Get-RemoteProgram -ComputerName server01,server02
This command will generate a list of installed programs on server01 and server02.
PowerShell
Edit|Remove
Get-RemoteProgram -ComputerName Server01 -Property DisplayVersion,VersionMajor
This command lill gather the list of programs from Server01 and attempts to retrieve the displayversion and versionmajor subkeys from the registry for each installed program
PowerShell
Edit|Remove
'server01','server02' | Get-RemoteProgram -Property Uninstallstring
This command will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program
PowerShell
Edit|Remove
# Installed programs: 
Get-RemoteProgram -Property Publisher,InstallDate,DisplayVersion,InstallSource,IsMinorUpgrade,ReleaseType,ParentDisplayName,SystemComponent | Where-Object {[string]$_.SystemComponent -ne 1 -and ![string]$_.IsMinorUpgrade -and ![string]$_.ReleaseType -and ![string]$_.ParentDisplayName} | Sort-Object ProgramName 
# Installed updates: 
Get-RemoteProgram -Property Publisher,InstallDate,DisplayVersion,InstallSource,IsMinorUpgrade,ReleaseType,ParentDisplayName,SystemComponent | Where-Object {[string]$_.SystemComponent -ne 1 -and ([string]$_.IsMinorUpgrade -or [string]$_.ReleaseType -or [string]$_.ParentDisplayName)} | Sort-Object ParentDisplayName,ProgramName 
# Installed Components: 
Get-RemoteProgram -Property Publisher,InstallDate,DisplayVersion,InstallSource,IsMinorUpgrade,ReleaseType,ParentDisplayName,SystemComponent | Where-Object {[string]$_.SystemComponent -eq 1} | Sort-Object ProgramName
Code provided by Georges Zwingelstein, to display the installed programs ordered by Installed programs, installed updates or system components.
PowerShell
Edit|Remove
'server01','server02' | Get-RemoteProgram -Property Uninstallstring -ExcludeSimilar -SimilarWord 4
Will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program. Will only display a single entry of a program of which the first four words are identical.
PowerShell
Edit|Remove
<# 
.Synopsis 
Generates a list of installed programs on a computer 
 
.DESCRIPTION 
This function generates a list by querying the registry and returning the installed programs of a local or remote computer. 
 
.NOTES    
Name       : Get-RemoteProgram 
Author     : Jaap Brasser 
Version    : 1.5 
DateCreated: 2013-08-23 
DateUpdated: 2019-08-02 
Blog       : http://www.jaapbrasser.com 
 
.LINK 
http://www.jaapbrasser.com 
 
.PARAMETER ComputerName 
The computer to which connectivity will be checked 
 
.PARAMETER Property 
Additional values to be loaded from the registry. Can contain a string or an array of string that will be attempted to retrieve from the registry for each program entry 
 
.PARAMETER IncludeProgram 
This will include the Programs matching that are specified as argument in this parameter. Wildcards are allowed. Both Include- and ExcludeProgram can be specified, where IncludeProgram will be matched first 
 
.PARAMETER ExcludeProgram 
This will exclude the Programs matching that are specified as argument in this parameter. Wildcards are allowed. Both Include- and ExcludeProgram can be specified, where IncludeProgram will be matched first 
 
.PARAMETER ProgramRegExMatch 
This parameter will change the default behaviour of IncludeProgram and ExcludeProgram from -like operator to -match operator. This allows for more complex matching if required. 
 
.PARAMETER LastAccessTime 
Estimates the last time the program was executed by looking in the installation folder, if it exists, and retrieves the most recent LastAccessTime attribute of any .exe in that folder. This increases execution time of this script as it requires (remotely) querying the file system to retrieve this information. 
 
.PARAMETER ExcludeSimilar 
This will filter out similar programnames, the default value is to filter on the first 3 words in a program name. If a program only consists of less words it is excluded and it will not be filtered. For example if you Visual Studio 2015 installed it will list all the components individually, using -ExcludeSimilar will only display the first entry. 
 
.PARAMETER SimilarWord 
This parameter only works when ExcludeSimilar is specified, it changes the default of first 3 words to any desired value. 
 
.PARAMETER DisplayRegPath 
Displays the registry path as well as the program name 
 
.PARAMETER MicrosoftStore 
Also queries the package list reg key, allows for listing Microsoft Store products for current user 
 
.EXAMPLE 
Get-RemoteProgram 
 
Description: 
Will generate a list of installed programs on local machine 
 
.EXAMPLE 
Get-RemoteProgram -ComputerName server01,server02 
 
Description: 
Will generate a list of installed programs on server01 and server02 
 
.EXAMPLE 
Get-RemoteProgram -ComputerName Server01 -Property DisplayVersion,VersionMajor 
 
Description: 
Will gather the list of programs from Server01 and attempts to retrieve the displayversion and versionmajor subkeys from the registry for each installed program 
 
.EXAMPLE 
'server01','server02' | Get-RemoteProgram -Property Uninstallstring 
 
Description 
Will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program 
 
.EXAMPLE 
'server01','server02' | Get-RemoteProgram -Property Uninstallstring -ExcludeSimilar -SimilarWord 4 
 
Description 
Will retrieve the installed programs on server01/02 that are passed on to the function through the pipeline and also retrieves the uninstall string for each program. Will only display a single entry of a program of which the first four words are identical. 
 
.EXAMPLE 
Get-RemoteProgram -Property installdate,uninstallstring,installlocation -LastAccessTime | Where-Object {$_.installlocation} 
 
Description 
Will gather the list of programs from Server01 and retrieves the InstallDate,UninstallString and InstallLocation properties. Then filters out all products that do not have a installlocation set and displays the LastAccessTime when it can be resolved. 
 
.EXAMPLE 
Get-RemoteProgram -Property installdate -IncludeProgram *office* 
 
Description 
Will retrieve the InstallDate of all components that match the wildcard pattern of *office* 
 
.EXAMPLE 
Get-RemoteProgram -Property installdate -IncludeProgram 'Microsoft Office Access','Microsoft SQL Server 2014' 
 
Description 
Will retrieve the InstallDate of all components that exactly match Microsoft Office Access & Microsoft SQL Server 2014 
 
.EXAMPLE 
Get-RemoteProgram -Property installdate -IncludeProgram '*[10*]*' | Format-Table -Autosize > MyInstalledPrograms.txt 
 
Description 
Will retrieve the ComputerName, ProgramName and installdate of the programs matching the *[10*]* wildcard and using Format-Table and redirection to write this output to text file 
 
.EXAMPLE 
Get-RemoteProgram -IncludeProgram ^Office -ProgramRegExMatch 
 
Description 
Will retrieve the InstallDate of all components that match the regex pattern of ^Office.*, which means any ProgramName starting with the word Office 
 
.EXAMPLE 
Get-RemoteProgram -DisplayRegPath 
 
Description 
Will retrieve list of programs from the local system and displays the registry path 
 
.EXAMPLE 
Get-RemoteProgram -DisplayRegPath -MicrosoftStore 
 
Description 
Will retrieve list of programs from the local system, while also retrieving Microsoft Store package and displaying the registry path 
#>