misc/ConvertTo-Markdown.ps1

<#
.Synopsis
   Converts a PowerShell object to a Markdown table.
.EXAMPLE
   $data | ConvertTo-Markdown
.EXAMPLE
   ConvertTo-Markdown($data)
#>

[CmdletBinding()]
[OutputType([string])]
Param (
    [Parameter(
        Mandatory = $true,
        Position = 0,
        ValueFromPipeline = $true
    )]
    [PSObject[]]$collection
)

# Source: https://gist.github.com/mac2000/86150ab43cfffc5d0eef

Begin {
    $items = @()
    $columns = @{}
}

Process {
    ForEach($item in $collection) {
        $items += $item

        $item.PSObject.Properties | %{
            if(-not $columns.ContainsKey($_.Name) -or $columns[$_.Name] -lt $_.Value.ToString().Length) {
                $columns[$_.Name] = $_.Value.ToString().Length
            }
        }
    }
}

End {
    ForEach($key in $($columns.Keys)) {
        $columns[$key] = [Math]::Max($columns[$key], $key.Length)
    }

    $header = @()
    ForEach($key in $columns.Keys) {
        $header += ('{0,-' + $columns[$key] + '}') -f $key
    }
    $header -join ' | '

    $separator = @()
    ForEach($key in $columns.Keys) {
        $separator += '-' * $columns[$key]
    }
    $separator -join ' | '

    ForEach($item in $items) {
        $values = @()
        ForEach($key in $columns.Keys) {
            $values += ('{0,-' + $columns[$key] + '}') -f $item.($key)
        }
        $values -join ' | '
    }
}