Eine Pause in PowerShell Script verwenden
Administratoren haben bestimmt den Satz “Drücken Sie eine beliebige Taste . . .” schon öfter in einer Batch Datei gesehen. Dies ist eine gewollte Pause, um das Script zu stoppen und eventuelle Fehler zu analysieren. Einen klassischen Pause-Befehl gibt es in PowerShell nicht, trotzdem ist es möglich das PowerShell Script zu stoppen.
Eine Pause im PowerShell Script einbauen
Damit die Meldung Drücken Sie eine beliebige Taste… in einem PowerShell Script erscheint gibt es verschiedene Möglichkeiten. Eine erzwungene Pause im Script ist oft notwendig, um Fehler zu analysieren oder um auf eine Reaktion des Benutzers zu warten. Für automatisierte Aufgaben ist dies übrigens nicht empfehlenswert. In englischen Systemen lautet die Meldung übrigens “Press any key to continue…“.
Pause in der System.Console
Mit dem Befehl der System.Console kann auf eine Eingabe gewartet werden. Der Nachteil ist allerdings, dass diese Meldung nicht in der PowerShell ISE funktioniert, sondern lediglich in der Console. Es kann eine beliebige Taste gedrückt werden, bis auf STRG, SHIFT und ALT.
write-host "Drücken Sie eine beliebige Taste..." [void][System.Console]::ReadKey($true)
Auf Eingabe warten mit RawUI
Auch mit der RawUI kann man auf Benutzer-Eingaben warten. Auch hier ist das Problem, dass dies nicht in der ISE funktioniert, sondern lediglich in der PowerShell Konsole. Auch hier können nicht die Tasten STRG, SHIFT und ALT abgefangen werden.
Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Klassische Pause mit CMD
Eine einfache Pause in CMD, beziehungsweise in einem Batch-Script ist sehr elegant. Doch das funktioniert in der PowerShell nicht. Doch es ist möglich im PS Script die CMD aufzurufen und auf eine Eingabe des Benutzers zu warten. Wird sehr häufig verwendet.
cmd /c Pause | Out-Null
Mit dem Parameter /c wird eine neue CMD Instanz geöffnet. Auch diese Methode funktioniert leider in der ISE NICHT.
Pause mit Read-Host
Ein ebenfalls eleganter Weg um eine Pause in einem PowerShell SCript zu erzwingen ist das Verwenden von Read-Host
. Der Vorteil ist, dass dies sogar in der ISE funktioniert. Aber wo ein Vorteil ist, folgt auch gleich ein Nachteil. Der Nachteil ist, dass nur ENTER als Eingabe akzeptiert wird.
Read-Host -Prompt "Um fortzufahren ENTER drücken..."
ReadKey in einem neuen Prozess
Die letzte Möglichkeit beinhaltet die erste Möglichkeit dieser Liste, allerdings in einem neuen Prozess. Dies hat den Vorteil, dass dies sowohl in der PowerShell Konsole funktioniert, aber auch in der ISE. Die Modifier Tasten wie SHIFT, ALT und STRG funktionieren auch hier leider nicht.
Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow