You've already forked SharedScripts
mirror of
https://github.com/jaapbrasser/SharedScripts.git
synced 2025-12-24 21:51:38 +02:00
96 lines
3.5 KiB
PowerShell
96 lines
3.5 KiB
PowerShell
|
|
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
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|