Functions/GenXdev.Console/Get-GenXDevCmdlets.ps1
############################################################################### <# .SYNOPSIS Retreives a list of all installed GenXdev modules and their Cmdlets and corresponding aliases .DESCRIPTION Retreives a list of all installed GenXdev modules and their Cmdlets and corresponding aliases .PARAMETER Filter Allows you to search for Cmdlets by providing searchstrings, with or without wildcards .PARAMETER $ModuleName Retreives all Cmdlets of provided modulename(s) .EXAMPLE PS d:\documents\PowerShell> cmds #> function Get-GenXDevCmdlets { [CmdletBinding()] param( [parameter( Mandatory = $false, Position = 0, ValueFromRemainingArguments )] [string] $Filter = "*", [parameter( ParameterSetName = "ModuleFilter", Mandatory = $false )] [string[]] $ModuleName = @("*") ) if (!$Filter.Contains("*")) { $Filter = "*$Filter*" } $ModuleName = $ModuleName.Replace("GenXdev.", "") $results = Get-Module "GenXdev.$ModuleName" -All | ForEach-Object -Process { $Module = $PSItem; $Module.NestedModules | ForEach-Object { $_ } $Module } | ForEach-Object { $Module = $PSItem; $PSItem.ExportedCommands.Values | ForEach-Object -ErrorAction SilentlyContinue { if ($PSItem.CommandType -eq "Function") { $aliases = ((Get-Alias -Definition ($PSItem.Name) -ErrorAction SilentlyContinue | ForEach-Object Name) -Join ", ").Trim(); } else { $aliases = ""; } if ((($PSItem.Name -like $Filter) -or ($aliases -like $Filter)) -and (($PSItem.Module.Name -eq $Module.Name) -or ($PSItem.Module.Name -like "$($Module.Name).*"))) { if ($PSItem.CommandType -eq "Function") { $nameAndAliases = "" if ([string]::IsNullOrWhiteSpace($aliases) -eq $false) { $nameAndAliases = "$($PSItem.Name) --> $aliases" } else { $nameAndAliases = $PSItem.Name } $desc = ""; try { $tmp = (Get-Help ($PSItem.Name) -Detailed -ErrorAction SilentlyContinue); if ($null -ne $tmp) { $tmp = $tmp.Description; if ($null -ne $tmp) { $tmp = $tmp.Text; if ($null -ne $tmp) { $desc = $tmp; } } } if ([string]::IsNullOrWhiteSpace($desc)) { try { $desc = "$(Select-String "#\s*DESCRIPTION\s+$($PSItem.Name):([^`r`n]*)" -input "$((Get-Command "$($PSItem.Name)").ScriptBlock)".Replace("`u{00A0}", " ") -AllMatches | ForEach-Object { try { $PSItem.matches.Groups[1].Value } catch {} })".Trim(); } catch { # Write-Warning $PSItem.Exception $desc = ""; } } } catch { $desc = ""; } $result = @{ NameAndAliases = $nameAndAliases; Name = $PSItem.Name; Aliases = $aliases; Description = $desc; ModuleName = $PSItem.Module.Name; Position = 0 } $result } } } } $results | Sort-Object -Property Position } |