Public/Get-ApplicationInfo.ps1
function Get-ApplicationInfo { <# .SYNOPSIS Short description .DESCRIPTION Long description .PARAMETER SearchTerm Parameter description .EXAMPLE Get-ApplicationInfo -SearchTerm "Git" .NOTES General notes #> [CmdletBinding()] param( [Parameter(Mandatory)] [string] $SearchTerm ) $matchedApps = New-Object System.Collections.ArrayList Get-RegInformation | ForEach-Object { if(Select-String -InputObject $_.DisplayName -Pattern $SearchTerm){ $matchedAppConfig = [PSCustomObject]@{ DisplayName = $_.DisplayName DisplayVersion = $_.DisplayVersion InstallLocation = $_.InstallLocation InstallSource = $_.InstallSource InstallDate = $_.InstallDate Publisher = $_.Publisher UninstallString = $_.UninstallString QuietUninstallString = $_.QuietUninstallString PSPath = $_.PSPath Error = $false ErrorMessage = $null } $matchedApps.Add($matchedAppConfig) | Out-Null $matchedAppConfig | Format-List $discoveredEXEs = Get-ChildItem -Path $matchedAppConfig.InstallLocation -Filter "*.exe" -Recurse $shortcuts = Get-ChildItem -Path "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\" -Filter "*.lnk" -Recurse $sh = New-Object -ComObject WScript.Shell $targetList = @{} $shortcuts | ForEach-Object { $path = Convert-Path -Path $_.PSPath $target = $sh.CreateShortcut($path).TargetPath $targetList.Add($path, $target) } $discoveredEXEs | ForEach-Object { $path = Convert-Path -Path $_.PSPath $targetList.GetEnumerator() | ForEach-Object { if ($path -eq $_.Value) { Write-Host "`nMatching exe and shortcut found:`n" -ForegroundColor Blue Write-Host "Executable : $path" -ForegroundColor Green Write-Host "Shortcut Target: $($_.Name)" -ForegroundColor Green } } } Write-Host "`nExecutables found in Program Directory ($($matchedAppConfig.InstallLocation)):" $discoveredEXEs.VersionInfo | Format-Table -Property OriginalFilename, FileVersion } } } |