ps/Modules/Alkami.DevOps.Inventory/Public/Get-ApplicationInventory.ps1

44 lines
1.6 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Get-ApplicationInventory {
<#
.SYNOPSIS
Returns an OrderedDictionary that Represents the Application Inventory.
#>
[CmdletBinding()]
Param()
$logLead = (Get-LogLeadName);
$providerStopWatch = [System.Diagnostics.StopWatch]::StartNew()
$applicationDictionary = New-Object System.Collections.Specialized.OrderedDictionary
$applicationDetails = New-Object System.Collections.Specialized.OrderedDictionary
try {
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Reading App Uninstall Details"
$uninstallDetails = Get-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : App Uninstall Details Retrieved"
foreach ($app in $uninstallDetails) {
$appName = $app | Select-Object -ExpandProperty PSChildName
$applicationDetails[$appName] = New-Object System.Collections.Specialized.OrderedDictionary
$applicationDetails[$appName]["Name"] = $app.DisplayName
$applicationDetails[$appName]["Version"] = $app.DisplayVersion
$applicationDetails[$appName]["Publisher"] = $app.Publisher
$applicationDetails[$appName]["InstallDate"] = $app.InstallDate
$applicationDetails[$appName]["UninstallString"] = $app.UninstallString
}
}
catch {
$applicationDetails["Error"] = $_.Exception.ToString()
}
$applicationDictionary.Add("Software", $applicationDetails)
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Provider Complete"
$providerStopWatch.Stop()
return $applicationDictionary
}