Public/New-MDImage.ps1

<#
    .SYNOPSIS
        This commandlet output image in markdown syntax

    .DESCRIPTION
        This commandlet output image in markdown syntax like this ![alt text](link "title")

    .PARAMETER Source
        Text that represents the image source

    .PARAMETER Title
        The title of the image

    .PARAMETER AltText
        The alternative text of the image

    .PARAMETER Link
        Add a link to the image

    .PARAMETER Subject
        The <SUBJECT> in https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg

    .PARAMETER Style
        The <STYLE> in https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg

    .PARAMETER Color
        The <Color> in https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg
        One of the brightgreen, green, yellowgreen, yellow, orange, red, lightgrey, blue

    .EXAMPLE
        New-MDImage -Link "example.png"
        "example.png" | New-MDImage

        ![](example.png)

    .EXAMPLE
        New-MDImage -Link "example.png" -Title "Example"
        "example.png" | New-MDImage -Title "Example"

        ![](example.png "Example")

    .EXAMPLE
        New-MDImage -Link "example.png" -Title "Example" -AltText "Failed to load"
        "example.png" | New-MDImage -Title "Example" -AltText "Failed to load"

        ![Failed to load](example.png "Example")

    .EXAMPLE
        New-MDImage -Subject "SUBJECT" -Status "STATUS" -Color "green"

        ![](https://img.shields.io/badge/SUBJECT-STATUS-green.svg)

    .INPUTS
        Any text representing link or parameters to drive shields.io badges

    .OUTPUTS
        The image construct in markdown

    .LINK
        New-MDLink
        https://help.github.com/articles/basic-writing-and-formatting-syntax/
        https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg
        http://shields.io/
#>

function New-MDImage {
    [CmdletBinding()]
    [OutputType([string])]
    Param (
        [Parameter(
            Mandatory = $false,
            Position = 0,
            ValueFromPipeline = $true,
            ParameterSetName="Source"
        )]
        [ValidateNotNullOrEmpty()]
        [string]$Source,
        [Parameter(
            Mandatory = $false
        )]
        [ValidateNotNullOrEmpty()]
        [string]$Title=$null,
        [Parameter(
            Mandatory = $false
        )]
        [string]$AltText=$null,
        [Parameter(
            Mandatory = $false,
            ParameterSetName="Shields.io"
        )]
        [string]$Subject=$null,
        [Parameter(
            Mandatory = $false,
            ParameterSetName="Shields.io"
        )]
        [string]$Status=$null,
        [Parameter(
            Mandatory = $false,
            ParameterSetName="Shields.io"
        )]
        [ValidateSet("brightgreen","green","yellowgreen","yellow","orange","red","lightgrey","blue")]
        [string]$Color=$null,
        [Parameter(
            Mandatory = $false,
            ParameterSetName="Shields.io"
        )]
        [ValidateSet("plastic","flat","flat-square","social")]
        [string]$Style=$null,
        [Parameter(
            Mandatory = $false
        )]
        [string]$Link=$null
    )

    Begin {
        $output=""
    }

    Process {
        if(-not $Source -and $Color)
        {
            $Subject=$Subject.Replace("-","--").Replace("_","__")
            $Subject=[System.Uri]::EscapeDataString($Subject)

            $Status=$Status.Replace("-","--").Replace("_","__")
            $Status=[System.Uri]::EscapeDataString($Status)
            
            #When running from powershell [System.Uri]::EscapeDataString is not escaping ()
            if(-not $ise)
            {
                $Subject=$Subject.Replace("(","%28").Replace(")","%29")
                $Status=$Status.Replace("(","%28").Replace(")","%29")
            }
            
            $shieldIo="$Subject-$Status-$Color"

            $Source="https://img.shields.io/badge/$shieldIo.svg"
            if($Style)
            {
                $Source+="?style=$Style"
            }

        }
        
        $output+="![$AltText]($Source"
        if($Title)
        {
            $output+=" ""$Title"""
        }

        $output+=")"
        if($Link)
        {
            $output=New-MDLink -Text $output -Link $Link
        }
    }

    End {
        $output
    }

}