Quantcast
Channel: Windows PowerShell Forum
Viewing all articles
Browse latest Browse all 2314

Probleme mit Countdown und Keypress

$
0
0

Hallo zusammen,

ich habe Probleme beim Implementieren einer Countdown-Funktion.
Als Basis habe ich ein Script aus dem WWW genommen und auf meine Anforderungen angepasst.

Im Prinzip setze ich scriptgesteuert einen Server auf. Dazwischen liegen mehrere Reboots. Vor jedem Reboot möchte ich einen Countdown haben. Wenn der Countdown abgelaufen ist, dann soll der Computer rebooten. Wenn während des Countdowns eine beliebige Taste gedrückt wurde, dann soll das Script pausieren und ein Menü angezeigt werden.

Das habe ich alles schon und funktioniert auch, aber sehr sehr unzuverlässig.
Die Funktion kann eigentlich noch viel mehr und deshalb möchte ich nicht auf eine komplett andere Basis umstellen. Ich habe die bestehende Funktion für eure geschätzte Hilfe einmal auf das wesentliche reduziert:

Function Start-Countdown {

    Param(

        [Int]$Seconds = 10

    )


    #save beginning value for total seconds
    $TotalSeconds=$Seconds

    #define the Escape key
    #$ESCKey = 27

    #define a variable indicating if the user aborted the countdown
    $Abort=$False

    while ($seconds -ge 1) {

        if ($host.ui.RawUi.KeyAvailable) {

            $key = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyUp,IncludeKeyDown")

            #if ($key.VirtualKeyCode -eq $ESCkey) {
            if ($key) {

                # Key was pressed so quit the countdown and set abort flag to True
    	        $Seconds = 0
                $Abort=$True
                break

            }
        }


        Write-Host "ACHTUNG: Der Computer wird in $Seconds Sekunden neu gestartet.`n`nDrücken Sie eine Taste um den Countdown abzubrechen ..." -foregroundcolor Yellow
        Start-Sleep -Seconds 1

        $Seconds--

    } #while


    if (-Not $Abort) {

        write-Host "Countdown selbstständig abgelaufen!"

    } else {

        write-Host "Countdown vom Benutzer abgebrochen!"

    }

}

Start-Countdown -Seconds 5

 

Ich hoffe, ich habe die Funktion jetzt nicht allzu sehr gestutzt. Beim einfachen Testen hat das vorher immer sauber funktioniert. Im produktiven Einsatz ist mir aufgefallen, dass der Countdown von selbst abgebrochen wurde. Also in etwa so, als wenn eine Taste gedrückt worden wäre. Ich habe dann irgendwo ein Flush Inputbuffer gesetzt, aber dann hat es wieder andere Probleme gegeben.

Außerdem wird der Keypress unsauber/verzögert abgefangen. Wahrscheinlich weil es nicht direkt in einer Schleife abgefragt wird. (start-sleep)

Kann mir jemand helfen das zu verbessern?

Vielen Dank


Viewing all articles
Browse latest Browse all 2314


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>