private/Get-DynamicFunctionCommentBasedHelp.ps1
|
function Get-DynamicFunctionCommentBasedHelp { [CmdletBinding()] param ( # FunctionInfo object from which to pull comment-based help content [Parameter(Mandatory)] [System.Management.Automation.FunctionInfo]$FunctionInfo ) process { $commentHelpInfo = $FunctionInfo.ScriptBlock.ast.GetHelpContent() if ($null -eq $commentHelpInfo.psobject.Properties.value) { return $null } $commentHelpProps = $commentHelpInfo | Get-Member -MemberType Property | Select-Object -ExpandProperty Name $sb = [System.Text.StringBuilder]::new() $null = $sb.AppendLine('<#') foreach ($prop in $commentHelpProps) { $propName = $prop.ToUpper() switch ($propName) { 'PARAMETERS' { $propName = 'PARAMETER' } 'EXAMPLES' { $propName = 'EXAMPLE' } 'LINKS' { $propName = 'LINK' } default {} } $value = $commentHelpInfo.$prop if ($value) { if ($value -is [array]) { $value = $value[0] } if ($value.Keys) { foreach ($key in $value.Keys) { $null = $sb.AppendLine(".$propName $key") $valueLines = $value[$key] -split "`n" foreach ($line in $valueLines) { if (-not [string]::IsNullOrEmpty($line)) { $null = $sb.AppendLine(" $line") } } } } else { $null = $sb.AppendLine(".$propName") $valueLines = $value -split "`n" foreach ($line in $valueLines) { if (-not [string]::IsNullOrEmpty($line)) { $null = $sb.AppendLine(" $line") } } } } } $null = $sb.AppendLine('#>') return $sb.ToString() } } |