Functions/Host/Format-HostText.ps1
<#
.SYNOPSIS Format the text with RGB colors and weight. .DESCRIPTION Use the ANSI escape sequence to use the full RGB colors formatting the text. The foreground and background can be specified as RGB. The font can be specified as bold #> function Format-HostText { [CmdletBinding()] param ( # Optional string builder. If specified, the text will be appended to # the existing string builder. Else returned as string. [Parameter(Mandatory = $false)] [System.Text.StringBuilder] $StringBuilder, # The message to format. [Parameter(Mandatory = $true)] [AllowEmptyString()] [System.String] $Message, # Add a new line break at the end. [Parameter(Mandatory = $false)] [Switch] $AppendLine, # Set the foreground color as RGB with an ANSI escape sequence. [Parameter(Mandatory = $false)] [ValidateRange(0,255)] [ValidateCount(3,3)] [System.Int32[]] $ForegroundColor, # Set the background color as RGB with an ANSI escape sequence. [Parameter(Mandatory = $false)] [ValidateRange(0,255)] [ValidateCount(3,3)] [System.Int32[]] $BackgroundColor, # Show the text in bold font. [Parameter(Mandatory = $false)] [Switch] $Bold ) $ansiEscape = [System.Char] 27 # If no string build object was passed, create a new one if (-not $PSBoundParameters.ContainsKey('StringBuilder')) { $StringBuilder = [System.Text.StringBuilder]::new() } # Foreground Color Prefix if ($PSBoundParameters.ContainsKey('ForegroundColor')) { $StringBuilder.AppendFormat("$ansiEscape[38;2;{0};{1};{2}m", $ForegroundColor[0], $ForegroundColor[1], $ForegroundColor[2]) | Out-Null } # Background Color Prefix if ($PSBoundParameters.ContainsKey('BackgroundColor')) { $StringBuilder.AppendFormat("$ansiEscape[48;2;{0};{1};{2}m", $BackgroundColor[0], $BackgroundColor[1], $BackgroundColor[2]) | Out-Null } # Bold Prefix if ($Bold.IsPresent) { $StringBuilder.Append("$ansiEscape[1m") | Out-Null } $StringBuilder.Append($Message) | Out-Null # Bold Suffix if ($Bold.IsPresent) { $StringBuilder.Append("$ansiEscape[0m") | Out-Null } # Background Color Suffix if ($PSBoundParameters.ContainsKey('BackgroundColor')) { $StringBuilder.Append("$ansiEscape[0m") | Out-Null } # Foreground Color Suffix if ($PSBoundParameters.ContainsKey('ForegroundColor')) { $StringBuilder.Append("$ansiEscape[0m") | Out-Null } # Add new line is specified if ($AppendLine.IsPresent) { $StringBuilder.AppendLine() | Out-Null } if (-not $PSBoundParameters.ContainsKey('StringBuilder')) { return $StringBuilder.ToString() } } |