ps/Modules/Alkami.DevOps.Inventory/Public/Get-ModuleInventory.ps1
2023-05-30 22:51:22 -07:00

44 lines
1.7 KiB
PowerShell

function Get-ModuleInventory {
<#
.SYNOPSIS
Returns an OrderedDictionary that Represents the Module Inventory.
#>
[CmdletBinding()]
Param()
$logLead = (Get-LogLeadName);
$providerStopWatch = [System.Diagnostics.StopWatch]::StartNew()
$moduleDictionary = New-Object System.Collections.Specialized.OrderedDictionary
$moduleDetails = New-Object System.Collections.Specialized.OrderedDictionary
try {
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Getting Available Modules"
$localModules = Get-Module -ListAvailable -Verbose:$false | Select-Object ModuleType, Name, Version, ExportedCommands, ModuleBase, Description
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Module Inventory Complete"
foreach ($module in $localModules) {
$moduleDetails[$module.Name] = New-Object System.Collections.Specialized.OrderedDictionary
$moduleDetails[$module.Name]["ModuleType"] = $module.ModuleType
$moduleDetails[$module.Name]["Name"] = $module.Name
$moduleDetails[$module.Name]["Version"] = $module.Version
$moduleDetails[$module.Name]["ExportedCommands"] = ($module.ExportedCommands.Values | Select-Object -ExpandProperty Name)
$moduleDetails[$module.Name]["ModuleBase"] = $module.ModuleBase
$moduleDetails[$module.Name]["Description"] = $module.Description
}
}
catch {
$moduleDetails["Error"] = $_.Exception.ToString()
}
$moduleDictionary.Add("Modules", $moduleDetails)
Write-Verbose "$logLead : [$($providerStopWatch.Elapsed)] : Provider Complete"
$providerStopWatch.Stop()
return $moduleDictionary
}