2021-08-28 11:44:08 +02:00
<#
2021-08-28 12:37:13 +02:00
. SYNOPSIS
convert-ps2md . ps1 [ < script > ]
. DESCRIPTION
Converts the comment-based help of a PowerShell script to Markdown
. EXAMPLE
PS > . \ convert-ps2md . ps1 myscript . ps1
. NOTES
2021-08-29 12:44:05 +02:00
Author : Markus Fleschutz | License : CC0
2021-08-28 12:37:13 +02:00
. LINK
https : / / github . com / fleschutz / PowerShell
2021-08-28 11:44:08 +02:00
#>
2021-08-28 14:20:05 +02:00
param ( [ string ] $script = " " )
2021-08-28 11:44:08 +02:00
2021-08-28 17:48:14 +02:00
function EncodePartOfHtml { param ( [ string ] $Value )
2021-08-28 11:44:08 +02:00
( $Value -replace '<' , '<' ) -replace '>' , '>'
}
2021-08-28 17:48:14 +02:00
function GetCode { param ( $Example )
2021-08-28 11:44:08 +02:00
$codeAndRemarks = ( ( $Example | Out-String ) -replace ( $Example . title ) , '' ) . Trim ( ) -split " `r `n "
$code = New-Object " System.Collections.Generic.List[string] "
for ( $i = 0 ; $i -lt $codeAndRemarks . Length ; $i + + ) {
if ( $codeAndRemarks [ $i ] -eq 'DESCRIPTION' -and $codeAndRemarks [ $i + 1 ] -eq '-----------' ) {
break
}
if ( 1 -le $i -and $i -le 2 ) {
continue
}
$code . Add ( $codeAndRemarks [ $i ] )
}
$code -join " `r `n "
}
2021-08-28 17:48:14 +02:00
function GetRemark { param ( $Example )
2021-08-28 11:44:08 +02:00
$codeAndRemarks = ( ( $Example | Out-String ) -replace ( $Example . title ) , '' ) . Trim ( ) -split " `r `n "
$isSkipped = $false
$remark = New-Object " System.Collections.Generic.List[string] "
for ( $i = 0 ; $i -lt $codeAndRemarks . Length ; $i + + ) {
if ( ! $isSkipped -and $codeAndRemarks [ $i - 2 ] -ne 'DESCRIPTION' -and $codeAndRemarks [ $i - 1 ] -ne '-----------' ) {
continue
}
$isSkipped = $true
$remark . Add ( $codeAndRemarks [ $i ] )
}
$remark -join " `r `n "
}
try {
2021-08-28 14:20:05 +02:00
if ( $script -eq " " ) { $script = read-host " Enter path to PowerShell script " }
2021-08-28 17:48:14 +02:00
$full = Get-Help $script -Full -Path D:
" # PowerShell Script $script "
2021-08-28 12:58:48 +02:00
2021-08-28 17:48:14 +02:00
" "
" ## Synopsis "
" $( $full . Synopsis ) "
2021-08-28 12:58:48 +02:00
$Description = ( $full . description | Out-String ) . Trim ( )
if ( $Description -ne " " ) {
2021-08-28 17:48:14 +02:00
" "
" ## Description "
2021-08-28 12:58:48 +02:00
" $Description "
}
$Syntax = ( ( $full . syntax | Out-String ) -replace " `r `n " , " `r `n `r `n " ) . Trim ( )
if ( $Syntax -ne " " ) {
" "
" ## Syntax "
" `` `` `` powershell "
" $Syntax "
" `` `` `` "
}
2021-08-28 11:44:08 +02:00
2021-08-28 14:20:05 +02:00
foreach ( $parameter in $full . parameters . parameter ) {
" "
2021-08-28 17:48:14 +02:00
" ## - $( $parameter . name ) < $( $parameter . type . name ) > Parameter "
2021-08-28 14:20:05 +02:00
" $( ( $parameter . description | Out-String ) . Trim ( ) ) "
" `` `` `` "
" $( ( ( ( $parameter | Out-String ) . Trim ( ) -split " `r `n " ) [ -5 . . -1 ] | % { $_ . Trim ( ) } ) -join " `r `n " ) "
" `` `` `` "
}
2021-08-28 17:48:14 +02:00
" ## <CommonParameters> "
" This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). "
2021-08-28 11:44:08 +02:00
2021-08-28 17:48:14 +02:00
foreach ( $input in $full . inputTypes . inputType ) {
2021-08-28 14:20:05 +02:00
" "
" ## Inputs "
2021-08-28 17:48:14 +02:00
" $( $input . type . name ) "
2021-08-28 14:20:05 +02:00
}
2021-08-28 11:44:08 +02:00
2021-08-28 17:48:14 +02:00
foreach ( $output in $full . outputTypes . outputType ) {
2021-08-28 14:20:05 +02:00
" "
" ## Outputs "
2021-08-28 17:48:14 +02:00
" $( $output . type . name ) "
2021-08-28 14:20:05 +02:00
}
2021-08-28 11:44:08 +02:00
2021-08-28 17:48:14 +02:00
foreach ( $example in $full . examples . example ) {
" "
" ## Example "
" `` `` `` powershell "
" $( GetCode $example ) "
" `` `` `` "
" $( GetRemark $example ) "
}
2021-08-28 11:44:08 +02:00
2021-08-28 12:58:48 +02:00
$Notes = ( $full . alertSet . alert | Out-String ) . Trim ( )
if ( $Notes -ne " " ) {
" "
" ## Notes "
" $Notes "
}
$Links = ( $full . relatedlinks | Out-String ) . Trim ( )
if ( $Links -ne " " ) {
" "
" ## Related Links "
" $Links "
}
2021-08-29 12:44:05 +02:00
" "
" *Created by convert-ps2md.ps1* "
2021-08-28 14:20:05 +02:00
} catch {
write-error " ⚠️ Error in line $( $_ . InvocationInfo . ScriptLineNumber ) : $( $Error [ 0 ] ) "
exit 1
2021-08-29 12:44:05 +02:00
}