functions/internal/Write/Write-HostEx.ps1

function Write-HostEx {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string]$MessageTemplate,
        [Parameter(Mandatory = $false)]
        [object[]]$PropertyValues,
        [parameter(Mandatory = $false)]
        [ConsoleColor]$ForegroundColor = [System.ConsoleColor]::White,
        [parameter(Mandatory = $false)]
        [ConsoleColor]$HighlightColor = [System.ConsoleColor]::Yellow
    )

    if ($null -eq $PropertyValues) {
        Write-Host $MessageTemplate -ForegroundColor $ForegroundColor
    }
    else {
        $index = 0
        $MessageTemplate -split '\{.+?\}' | ForEach-Object { 
            Write-Host $_ -NoNewline -ForegroundColor $ForegroundColor
    
            Write-Host $PropertyValues[$index++] -NoNewline -ForegroundColor $HighlightColor
        }
        Write-Host
    }
}