44 lines
1.7 KiB
PowerShell
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
|
||
|
}
|