Wie man ein PowerShell-Skript vorübergehend anhält



Skripte sind eine praktische Möglichkeit, Abläufe zu automatisieren, insbesondere unter Windows. PowerShell wird dafür häufig verwendet, da es sehr flexibel ist. Manchmal ist es jedoch notwendig, ein Skript anzuhalten – beispielsweise um auf eine manuelle Eingabe zu warten oder einem Prozess eine Pause zu gönnen. Die optimale Vorgehensweise hierfür zu finden, kann etwas knifflig sein, insbesondere wenn zeitgesteuerte Verzögerungen anstelle von Benutzereingaben gewünscht sind. Dieser Leitfaden erklärt daher, wie Sie Ihre PowerShell-Skripte anhalten können, entweder für eine festgelegte Anzahl von Sekunden oder bis der Benutzer eine Taste drückt. Außerdem ist es hilfreich zu wissen, wie sich PowerShell-Skripte im Vergleich zur Eingabeaufforderung (cmd.exe) verhalten, da nicht alles austauschbar ist.

Beim Skripten kann es schnell lästig werden, wenn Skripte ohne Unterbrechung durchlaufen – genau hier kommen die Pausen ins Spiel. Wenn Sie einen Prozess automatisieren, aber dennoch Kontrolle behalten möchten, ermöglichen Ihnen diese Pausen eine bessere Steuerung des Ablaufs. Sie können beispielsweise eine Verzögerung vor dem nächsten Schritt einfügen oder auf Benutzereingaben warten, bevor Sie fortfahren. Ein kleiner Hinweis: Einige Befehle verhalten sich je nach verwendeter PowerShell- oder cmd-Eingabeaufforderung unterschiedlich. Daher hilft es, die Unterschiede zu kennen, um Verwirrung zu vermeiden.

Wie kann man ein PowerShell-Skript für eine bestimmte Zeit oder bis zur Benutzereingabe anhalten?

Ein Skript für eine exakte Anzahl von Sekunden anhalten

Dies ist die einfachste und relativ zuverlässige Methode. Wenn Sie das Skript lediglich um eine bestimmte Anzahl von Sekunden verzögern möchten, können Sie den Befehl `Start-Sleep` verwenden. Er ist unkompliziert und funktioniert gut, da er keine Benutzerinteraktion erfordert. Sie geben einfach an, wie viele Sekunden (oder Millisekunden) gewartet werden soll.

  • Anwendung: Start-Sleep -Seconds 5– Diese Funktion wartet exakt fünf Sekunden. Ich bin mir nicht sicher, warum das funktioniert, aber bei manchen Konfigurationen kann die Wartezeit minimal abweichen, insbesondere unter Last. Für die meisten Anwendungsfälle ist sie aber in der Regel recht genau.

Es ist auch möglich, Millisekunden anzugeben, wenn Sie eine kürzere Pause benötigen: Start-Sleep -Milliseconds 500. Dies kann nützlich sein, wenn Sie eine Verzögerung von einer halben Sekunde wünschen.

Pause mit einem Timeout, das der Benutzer abbrechen kann

Eine weitere Möglichkeit besteht darin, den Timeout -Befehl in PowerShell zu verwenden, was etwas ungewöhnlich ist. Sie können eine maximale Wartezeit festlegen, aber die Besonderheit ist, dass der Benutzer die verbleibende Wartezeit durch Drücken einer beliebigen Taste überspringen kann. Dies ist nützlich, wenn Sie eine Pause einlegen, dem Benutzer aber die Option geben möchten, früher fortzufahren.

  • Beispiel: timeout /t 10— Hier wird 10 Sekunden gewartet, aber wenn der Benutzer eine beliebige Taste drückt, wird sofort fortgefahren.

Jetzt wird es etwas kurios: In PowerShell kann man timeout /t 10Befehle direkt ausführen, die dann warten. Drückt man jedoch eine Taste, wird die Ausführung vorzeitig abgebrochen. Es handelt sich also um eine Art Hybrid – eine zeitgesteuerte Pause mit optionalem vorzeitigem Abbruch. Wichtig: Dies funktioniert nicht mit reinen PowerShell-Befehlen ohne Aufruf der Eingabeaufforderung. Außerdem berichten einige Benutzer, dass sich das Verhalten unter bestimmten Windows-Versionen ändern oder eine spezielle Syntax erfordern kann.

Wie man ein Skript mit PAUSE anhält und auf eine Benutzereingabe wartet

Wenn Sie die Ausführung vollständig anhalten und auf das Drücken der Eingabetaste durch den Benutzer warten möchten, können Sie den klassischen PASUE -Befehl verwenden. Dieser Befehl ist kein nativer PowerShell-Befehl, kann aber cmd /c pauseinnerhalb von PowerShell oder direkt in cmd.exe ausgeführt werden.

  • Beispiel: cmd /c pauseWenn dies ausgeführt wird, erscheint die Meldung „Drücken Sie eine beliebige Taste, um fortzufahren…“, anschließend wird gewartet, bis eine Taste gedrückt wird.

Diese Methode eignet sich gut für manuelle Skripte, bei denen sichergestellt werden soll, dass jemand bereit ist, bevor es losgeht. Beachten Sie jedoch, dass sie nicht für Hintergrundprozesse oder automatisierte Skripte geeignet ist, da diese nicht auf Benutzereingaben reagieren können.

Funktioniert das auch in cmd.exe?

Ja, dieselben Befehle funktionieren auch in der Eingabeaufforderung, allerdings mit einigen Einschränkungen.Start-Sleepist ein PowerShell-Cmdlet und kann daher nicht in der Eingabeaufforderung ausgeführt werden, es sei denn, Sie rufen PowerShell explizit auf. Befehle wie timeout /tund pausesind jedoch in die Eingabeaufforderung integriert. Der timeoutBefehl in der Eingabeaufforderung eignet sich perfekt, wenn das Skript kurz warten, aber durch Drücken einer Taste vorzeitig abgebrochen werden soll.

Interessanterweise Sleepfunktioniert der Befehl (ohne Bindestrich oder PowerShell-Modul) nicht in der Eingabeaufforderung (cmd), er ist also eine reine PowerShell-Funktion. Anders sieht es aus, wenn Sie Batchdateien schreiben timeoutund pauseIhre Freunde sind.

Zusammenfassend lässt sich sagen, dass die Wahl der richtigen Pausenmethode von der jeweiligen Umgebung abhängt. Manchmal hilft nur Ausprobieren, insbesondere wenn sich das Skript unter verschiedenen Windows-Versionen oder -Konfigurationen nicht wie erwartet verhält.



War dieser Artikel hilfreich?