Public/Get-FormattedText.ps1

function Get-FormattedText
{
    param
    (
        [Parameter(Position = 1, ValueFromPipeline)]
        [string[]]$Text,

        [ValidateSet('Black', 'Red', 'Green', 'Yellow', 'Blue', 'Magenta', 'Cyan', 'White')]
        [string]$BackgroundColor,

        [ValidateSet('Black', 'Red', 'Green', 'Yellow', 'Blue', 'Magenta', 'Cyan', 'White')]
        [string]$ForegroundColor,

        [switch]$BackgroundBright,
        [switch]$ForegroundBright,
        [switch]$Negative,
        [switch]$Underline
    )

    Process
    {
        foreach($Item in $Text)
        {
            $Values = @()

            if ($BackgroundColor) {
                if ($BackgroundBright) {
                    $Values += 100 + (Get-ColorOffset -Color $BackgroundColor)
                }
                else {
                    $Values += 40 + (Get-ColorOffset -Color $BackgroundColor)
                }
            }

            if ($ForegroundColor) {
                if ($ForegroundBright) {
                    $Values = 90 + (Get-ColorOffset -Color $ForegroundColor)
                }
                else {
                    $Values = 30 + (Get-ColorOffset -Color $ForegroundColor)
                }
            }

            if ($Negative) {
                $Values += 7
            }

            if ($UnderLine) {
                $Values += 4
            }

            if ($Values) {
                $Esc = [char]27
                "$Esc[$($Values -join ';')m$Item$Esc[0m"
            }
            else {
                $Item
            }
        }
    }
}