Get-RemoteProgram.ps1
<#PSScriptInfo
.VERSION 1.2.1 .GUID c2d86c61-196d-40cd-9cca-7183fb44cc14 .AUTHOR Jaap Brasser .DESCRIPTION This function generates a list by querying the registry and returning the installed programs of a local or remote computer. .COMPANYNAME .COPYRIGHT .TAGS Remote Registry .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES #> Function Get-RemoteProgram { <# .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.2.1 DateCreated: 2013-08-23 DateUpdated: 2015-02-28 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 .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 #> [CmdletBinding(SupportsShouldProcess=$true)] param( [Parameter(ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [string[]] $ComputerName = $env:COMPUTERNAME, [Parameter(Position=0)] [string[]]$Property ) begin { $RegistryLocation = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\', 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\' $HashProperty = @{} $SelectProperty = @('ProgramName','ComputerName') if ($Property) { $SelectProperty += $Property } } process { foreach ($Computer in $ComputerName) { $RegBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$Computer) foreach ($CurrentReg in $RegistryLocation) { if ($RegBase) { $CurrentRegKey = $RegBase.OpenSubKey($CurrentReg) if ($CurrentRegKey) { $CurrentRegKey.GetSubKeyNames() | ForEach-Object { if ($Property) { foreach ($CurrentProperty in $Property) { $HashProperty.$CurrentProperty = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue($CurrentProperty) } } $HashProperty.ComputerName = $Computer $HashProperty.ProgramName = ($DisplayName = ($RegBase.OpenSubKey("$CurrentReg$_")).GetValue('DisplayName')) if ($DisplayName) { New-Object -TypeName PSCustomObject -Property $HashProperty | Select-Object -Property $SelectProperty } } } } } } } } |