Functions/Write-RGB.ps1

function Write-RGB {
    <#
        .SYNOPSIS
            Write to the console in 24-bit colors!
        .DESCRIPTION
            This function lets you write to the console using 24-bit color depth.
            You can specify colors using its RGB values.
        .EXAMPLE
            Write-RGB 'PowerShell rocks!'
            Will write the text using the default colors.
        .EXAMPLE
            Write-RGB 'PowerShell rocks!' -ForegroundColor ([rgb]::new(255,192,203))
            Will write the text in a pink foreground color.
        .EXAMPLE
            Write-RGB 'PowerShell rocks!' -ForegroundColor ([rgb]::new(255,192,203)) -BackgroundColor ([rgb]::new(128,128,0))
            Will write the text in a pink foreground color and an olive background color.
        .NOTES
            Author: Øyvind Kallstad
            Version: 1.0
            Date: 23.09.2016
        .LINK
            https://communary.net/
    #>

    [CmdletBinding()]
    param (
        # The text you want to write.
        [Parameter(Position = 0)]
        [ValidateNotNullOrEmpty()]
        [string] $Text,
        
        # The foreground color of the text. Defaults to white.
        [Parameter(Position = 1)]
        [rgb] $ForegroundColor = [rgb]::new(255,255,255),
        
        # The background color of the text. Defaults to PowerShell Blue.
        [Parameter(Position = 2)]
        [rgb] $BackgroundColor = [rgb]::new(1,36,86),
        
        # No newline after the text.
        [Parameter()]
        [switch] $NoNewLine
    )
    
    if ($PSVersionTable.PSVersion.Build -ge 14931) {

        $escape = [char]27 + '['
        $resetAttributes = "$($escape)0m"
        
        $foreground = "$($escape)38;2;$($ForegroundColor.Red);$($ForegroundColor.Green);$($ForegroundColor.Blue)m"
        $background = "$($escape)48;2;$($BackgroundColor.Red);$($BackgroundColor.Green);$($BackgroundColor.Blue)m"
        
        #Write-Host ($escape + $foreground + $background + $Text + $resetAttributes)
        Write-Host ($foreground + $background + $Text + $resetAttributes) -NoNewline:$NoNewLine
    }

    else {
        Write-Warning "This function will only work with build 14931 or above. Your build version is $($PSVersionTable.PSVersion.Build)"
    }
}