doc/New-Documentation.ps1
function New-Documentation { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0 )] [string]$ModuleName, [Parameter(Mandatory = $false, Position = 1 )] [string]$OutputFolderPath = (Get-Location) ) $parametersProperties = @( 'DefaultValue', 'ParameterValue', 'PipelineInput', 'Position', 'Required' ) $NL = [System.Environment]::NewLine $scriptStart = "``````PowerShell$NL" $scriptEnd = "$NL``````" $outputFile = (New-TemporaryFile).FullName foreach ($cmd in (Get-Command -Module $ModuleName).Name ) { Write-Verbose "Generating documentation for $($cmd)" $help = Get-Help $cmd -ErrorAction 'SilentlyContinue' "$NL## " + $cmd | Out-File -FilePath $outputFile -Append if ($help.Synopsis) { "$NL### .SYNOPSIS" | Out-File -FilePath $outputFile -Append $NL + $help.Synopsis | Out-File -FilePath $outputFile -Append } if ($help.Syntax) { "$NL### .SYNTAX" | Out-File -FilePath $outputFile -Append $NL + $scriptStart + ($help.Syntax | Out-String).trim() + $scriptEnd | Out-File -FilePath $outputFile -Append } if ($help.Description) { "$NL### .DESCRIPTION" | Out-File -FilePath $outputFile -Append $NL + $help.Description.Text | Out-File -FilePath $outputFile -Append } if ($help.Parameters) { "$NL### .PARAMETERS" | Out-File -FilePath $outputFile -Append forEach ($item in $help.Parameters.Parameter) { "$NL### ``-" + $item.name + "``" | Out-File -FilePath $outputFile -Append if ($item.Description.Text) { $NL + $item.Description.Text | Out-File -FilePath $outputFile -Append } "$NL|||" | Out-File -FilePath $outputFile -Append '|-|:-|' | Out-File -FilePath $outputFile -Append "|**Type**: |$($item.Type.Name)|" | Out-File -FilePath $outputFile -Append forEach ($p in $parametersProperties) { if ($item.$p) { "|**$p**: |$($item.$p)|" | Out-File -FilePath $outputFile -Append } } } } if ($help.Examples) { "$NL## Examples" | Out-File -FilePath $outputFile -Append forEach ($item in $help.Examples.Example) { "$NL### " + $item.title.Replace('-', '').Replace(' EXAMPLE', 'Example') | Out-File -FilePath $outputFile -Append if ($item.Code) { $NL + $scriptStart + $item.Code + $scriptEnd | Out-File -FilePath $outputFile -Append } } } } try { $finalFileName = "$OutputFolderPath\$ModuleName.md" [System.Io.File]::ReadAllText($outputFile) | Out-File -FilePath $finalFileName -Encoding utf8 } finally { Remove-Item $outputFile -Force } } |