src/TaskbarProgress.ps1

$script:TaskbarProgressEnabled = $false
if ($Host.UI.SupportsVirtualTerminal -and -not [System.Console]::IsOutputRedirected) {
    $script:TaskbarProgressEnabled = $true
}

$script:TaskbarProgressEsc = [char]27
$script:TaskbarProgressBel = [char]7

function Write-TaskbarProgress {
    param([int]$Percent)
    if (-not $script:TaskbarProgressEnabled) { return }
    if ($PSBoundParameters.ContainsKey('Percent')) {
        $p = [Math]::Max(0, [Math]::Min(100, $Percent))
        Write-Host -NoNewline ($script:TaskbarProgressEsc + "]9;4;1;$p" + $script:TaskbarProgressBel)
    }
    else {
        Write-Host -NoNewline ($script:TaskbarProgressEsc + "]9;4;3" + $script:TaskbarProgressBel)
    }
}

function Write-TaskbarProgressClear {
    if ($script:TaskbarProgressEnabled) {
        Write-Host -NoNewline ($script:TaskbarProgressEsc + "]9;4;0" + $script:TaskbarProgressBel)
    }
}

function Write-TaskbarProgressError {
    if ($script:TaskbarProgressEnabled) {
        Write-Host -NoNewline ($script:TaskbarProgressEsc + "]9;4;2;100" + $script:TaskbarProgressBel)
    }
}