lib/UI.Banner.ps1
function Write-Banner { [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 1)] [String] $String, [Parameter(Mandatory = $false)] [String] $EdgeCharacter = "*", [Parameter(Mandatory = $false)] [System.ConsoleColor] $ForegroundColor = "Blue", [Parameter(Mandatory = $false)] [System.ConsoleColor] $BackgroundColor = "Black", [Parameter(Mandatory = $false)] [Int32] $PaddingSpaces = 8 ) ## When running in TMConsole, print a Metadata string, and not a standard Write-Host ## Add a prefix to handle this Write-Host output, to be handled by TMC # $BannerMetadata = [PSCustomObject]@{ # Type = 'Banner' # EdgeCharacter = $EdgeCharacter # ForegroundColor = $ForegroundColor # BackgroundColor = $BackgroundColor # Message = $String # } | ConvertTo-Json -Compress # $BannerMetadataString = '||TMC:' + $BannerMetadata # $BannerMetadataString = '' ## Calculate the Tab Spacing the string requires ## {edgeCharacter}{paddingSpaces*N}$String{paddingSpaces*n}{edgeCharacter} $StringCharacterCount = $String.Length + ($PaddingSpaces * 2) + ($EdgeCharacter.Length * 2) ## Create a Banner Pad Row to use as the Header/Footer $BannerPadRowStringBuilder = [System.Text.StringBuilder]::new() for ($i = 0; $i -lt $StringCharacterCount ; $i++) { [void]$BannerPadRowStringBuilder.Append($EdgeCharacter) } $BannerPadRow = $BannerPadRowStringBuilder.ToString() ## Create the Banner Text String $BannerString = [System.Text.StringBuilder]::new() ## Write the Text Banner [void]$BannerString.Append($EdgeCharacter) for ($i = 0; $i -lt $PaddingSpaces; $i++) { [void]$BannerString.Append(' ') } [void]$BannerString.Append($String) for ($i = 0; $i -lt $PaddingSpaces; $i++) { [void]$BannerString.Append(' ') } [void]$BannerString.Append($EdgeCharacter) ## Print the Banner # $OutputString = "$($BannerMetadataString)`n$($BannerPadRow)`n$($BannerString)`n$($BannerPadRow)`n`n" $OutputString = "`n$($BannerPadRow)`n$($BannerString)`n$($BannerPadRow)`n" $OutputString | Write-Host -ForegroundColor $ForegroundColor -BackgroundColor $BackgroundColor } |