Public/Start-Countdown.ps1

<#
    .SYNOPSIS
        Zeigt die Restlaufzeit.
 
    .EXAMPLE
        Start-Countdown -Minutes 15 -Title 'Kaffeepause-Ende in'
#>

function Start-Countdown {

    [CmdletBinding()]
    param (
        [ValidateRange(1, 525600)] # 1 Minute bis 1 Jahr
        [decimal]$Minutes = 0,

        [ValidateRange(1, 525600)] # 1 Minute bis 1 Jahr
        [decimal]$Seconds = 0,

        [ValidateLength(3, 50)]
        [string]$Title = 'Restlaufzeit des Countdowns'
    )

    $Private:My = [Hashtable]::Synchronized(@{})

    $Private:My.Dauer = New-TimeSpan -Minutes $Minutes -Seconds $Seconds 
    $Private:My.Ende = (Get-Date) + $Private:My.Dauer
    $Private:My.HundertProzentWert = $Private:My.Dauer.TotalSeconds

    while (1 -eq 1) {
        
        $Private:My.Differenz = New-TimeSpan -End $Private:My.Ende
        if ($Private:My.Differenz.Ticks -le 0) {
            break
        }

        Clear-Host

        "▓" * ($Private:My.Differenz.TotalSeconds / $Private:My.HundertProzentWert * 100)

        $Title | Write-Host -ForegroundColor Yellow
    
        if ($Private:My.Differenz.Hours -gt 1) {
            "$($Private:My.Differenz.Hours) Stunden " | Write-Host -NoNewline -ForegroundColor Cyan
        }
        elseif ($Private:My.Differenz.Hours -gt 0) {
            "$($Private:My.Differenz.Hours) Stunde " | Write-Host -NoNewline -ForegroundColor Cyan
        }

        if ($Private:My.Differenz.Minutes -gt 1) {
            "$($Private:My.Differenz.Minutes) Minuten " | Write-Host -NoNewline -ForegroundColor Green
        }
        elseif ($Private:My.Differenz.Minutes -gt 0) {
            "$($Private:My.Differenz.Minutes) Minute " | Write-Host -NoNewline -ForegroundColor Green
        }

        if ($Private:My.Differenz.Seconds -gt 1) {
            "$($Private:My.Differenz.Seconds) Sekunden" | Write-Host -NoNewline -ForegroundColor Red
        }
        elseif ($Private:My.Differenz.Seconds -gt 0) {
            "$($Private:My.Differenz.Seconds) Sekunde" | Write-Host -NoNewline -ForegroundColor Red
        }

        " !" | Write-Host -ForegroundColor White

        "▓" * ($Private:My.Differenz.TotalSeconds / $Private:My.HundertProzentWert * 100)
    
        Start-Sleep -Seconds 1
    
    }
}
<#
Start-Countdown -Title 'Kaffeepause-Ende in' -Minutes 2
#>