PSModuleOverview.psm1
function New-ModuleOverview { <# .SYNOPSIS Generates a Markdown file with a short description of each public command in a module. .DESCRIPTION Finds all the public commands in a specified module and produces a simple Markdown file detailing the description or synopsis (user choice) for each. .PARAMETER ModuleName Name of the module to generate an overview for. If the module isn't already loaded then it will be loaded. .PARAMETER Path Output path for the Markdown file. Must end in .md. .PARAMETER HelpContent Which piece of help content should be used in the generated content, either Synopsis or Description. Defaults to Synopsis .PARAMETER Append Append to the end of an existing Markdown file. .EXAMPLE New-ModuleOverview -ModuleName TLS -Path .\readme.md This will generate an overview of the TLS module and output it to readme.md in the current directory. .EXAMPLE New-ModuleOverview -ModuleName DISM -Path .\readme.md -Append This will generate an overview of the DISM module and output it to an existing readme.md in the current directory. .EXAMPLE New-ModuleOverview -ModuleName PSScheduledJob -Path .\readme.md -HelpContent Description This will generate an overview of the PSScheduledJob module using the description from each help comment and output it to readme.md in the current directory. #> [cmdletbinding()] param ( [Alias('Name')] [string]$ModuleName, [ValidateScript({ if ($_.Extension -ne '.md') { throw 'Path should be to a Markdown (md) file.' } $true })] [Alias('Fullname','FilePath')] [System.Io.Fileinfo]$Path, [ValidateSet('Description','Synopsis')] [string]$HelpContent = 'Synopsis', [Switch]$Append ) if (-not(Get-Module $ModuleName)) { Import-Module -Name $ModuleName } $OutString = "# About $ModuleName*`n`n" $Commands = Get-Command -Module $ModuleName Foreach ($Command in $Commands) { $OutString += "## $($Command.Name)`n`n" try { if ($HelpContent -eq 'Description') { $OutString += "$((Get-Help $Command.Name).Description.Text)`n`n`n" } else { $OutString += "$((Get-Help $Command.Name).Synopsis)`n`n`n" } } catch { if ($_.FullyQualifiedErrorId -like 'TypeNotFound*') { Write-Warning "Failed to get help for $($Command.Name) due to: $($_.Exception.Message)" } else { Write-Error $_ -ErrorAction Continue } } } if ($Append) { Add-Content -Value $OutString -Path $Path } else { Set-Content -Value $OutString -Path $Path -Force } } |