Möglicherweise versuchen Sie, ein Skript zu schreiben, für dessen Abschluss eine Benutzereingabe erforderlich ist, oder manchmal erfordert das Skript eine Verzögerung, damit die Ausführung eines anderen Prozesses zuerst abgeschlossen werden kann.
Der für solche Zwecke am häufigsten verwendete Befehl ist derStart-SleepCmdlet. Da PowerShell auch CMD-Befehle unterstützt, können Sie auch die verwendenPauseUndTimeoutBefehle.
In diesem Artikel haben wir die Verwendung dieser und weiterer Befehle zum Anhalten in Powershell erklärt.
Sie können die folgenden Methoden zum Anhalten in PowerShell verwenden. Da wir sowohl native als auch nicht native Methoden einbezogen haben, können Sie diese je nach Bedarf verwenden.
Start-Schlaf
Der Zweck derStart-SleepDas Cmdlet dient dazu, die Aktivität in einem Skript oder einer Sitzung für einen bestimmten Zeitraum anzuhalten. Sie können es mit dem verwenden-SecondsUnd-MillisecondsParameter, wie in den folgenden Beispielen gezeigt.
Um die Aktivität für 5 Sekunden zu unterbrechenStart-Sleep -Seconds 5

Um die Aktivität für 200 Millisekunden anzuhaltenStart-Sleep -Milliseconds 200
Um die Aktivität für 4,3 Sekunden anzuhalten, können Sie Folgendes verwenden:Start-Sleep -Seconds 4.3
Start-Sleep -Milliseconds 4300
Start-Sleep -Seconds 4 -Milliseconds 300
Sie können auch integrierte PowerShell-Aliase verwenden. Sie können anstelle von auch „sleep“ und „-s“ verwendenStart-SleepUnd-Secondsjeweils. Der vorherige Befehl kann also wie folgt geschrieben werden:Sleep -s 4.3

Zum Schluss können Sie STRG + C drücken, um auszubrechenStart-Sleep.
Read-Host
Der Zweck derRead-HostDas Cmdlet liest einige Eingaben von der Konsole und hält dabei das Skript an. Es wird normalerweise verwendet, um den Benutzer zur Eingabe von Daten wie Passwörtern, Benutzernamen usw. aufzufordern.
Der folgende Befehl fordert den Benutzer beispielsweise auf, seinen Namen einzugeben, und die Eingabe wird in der „$Name-Variable“ gespeichert.$Name = Read-Host "Enter Your Name"

Wenn Sie dies verwenden, um den Benutzer zur Eingabe seines Passworts aufzufordern, möchten Sie möglicherweise das hinzufügen-AsSecureStringoder-MaskInputParameter am Ende, um Sternchen anstelle des Passworts anzuzeigen.
Console.ReadKey
DerConsole.ReadKey()Die Methode wird häufig verwendet, um die Programmausführung anzuhalten, bis der Benutzer eine Taste drückt. Wenn Sie beispielsweise versuchen, das Programm anzuhalten, bis der Benutzer die Eingabetaste drückt, würden Sie es folgendermaßen verwenden:Console.ReadKey().Key != ConsoleKey.Enter

RawUI.ReadKey
DerRawUI.ReadKeyDie Methode ähnelt der Console ReadKey-Methode, außer dass Sie mit dieser Methode einige weitere Optionen verwenden können. Diese Optionen sind:
AllowCtrlC– Erlauben Sie, dass STRG + C als Tastendruck verarbeitet wird, anstatt ein Unterbrechungsereignis auszulösen.IncludeKeyDown– Berücksichtigen Sie Tastendruck-Ereignisse (die ausgelöst werden, wenn eine Taste gedrückt wird).IncludeKeyUp– Einschließen von Tastenbetätigungsereignissen (wird ausgelöst, wenn der Benutzer eine Taste auf der Tastatur loslässt).NoEcho– Beim Drücken wird das Zeichen für die Taste nicht im Fenster angezeigt.
Beachten Sie, dass entweder IncludeKeyDown oder IncludeKeyUp oder beide enthalten sein müssen. Vor diesem Hintergrund können Sie diese Methode mit den folgenden Optionen verwenden:$host.UI.RawUI.ReadKey(‘AllowCtrlC,IncludeKeyDown')

Thread.Sleep
DerThread.SleepDie Methode unterbricht den aktuellen Thread für einen bestimmten Zeitraum. Sie können diese Methode mit einem millisecondsTimeout-Argument oder einem TimeSpan-Objekt verwenden, wie unten gezeigt.
Im folgenden Beispiel wird der aktuelle Thread für 3,5 Sekunden angehalten[System.Threading.Thread].Sleep(3500)

Alternativ können Sie den Wert wie unten gezeigt in Form von Tagen, Stunden, Minuten, Sekunden und Millisekunden eingeben:[System.Threading.Thread].Sleep([TimeSpan]::New(0, 0, 0, 3, 500))
Set-PSBreakPoint
DerSet-PSBreakpointDas Cmdlet wird zum Debuggen von PowerShell-Skripten verwendet. Es wird verwendet, um Haltepunkte festzulegen, an denen PowerShell die Ausführung vorübergehend stoppt und die Kontrolle an den Debugger übergibt.

Mit diesem Cmdlet können Sie drei Arten von Haltepunkten festlegen. Zeilenhaltepunkt, Befehlshaltepunkt und Variablenhaltepunkt. Die Anwendungsfälle hierfür sind zahllos, wir empfehlen daher, dies zu prüfenMicrosofts Set-PSBreakPoint-Dokumentationfür weitere Details.
Warte-Job
Sie können die verwendenWait-JobDas Cmdlet wartet darauf, dass ein bestimmter Job oder alle Jobs einen Abschlussstatus haben (abgeschlossen, fehlgeschlagen, gestoppt, angehalten oder getrennt), bevor die Ausführung fortgesetzt wird.
Im folgenden Beispiel hält das Cmdlet das PowerShell-Skript an, bis sich Job1 im Beendigungszustand befindet.Wait-Job -Name "Job1"
Um das Gleiche für alle Jobs zu tun, könnten Sie Folgendes verwenden:Get-Job | Wait-Job

Sie können auch die verwenden-TimeoutMit dieser Option legen Sie in Sekunden fest, wie lange auf den Abschluss des Auftrags gewartet werden soll, bevor eine Zeitüberschreitung auftritt und die Ausführung des Skripts fortgesetzt wird.
Mehr
Falls Sie einen Befehl oder ein Skript ausführen, das eine große Ausgabemenge anzeigt, können Sie Folgendes verwendenmoreBefehl zum Anhalten, nachdem ein Ergebnisbildschirm angezeigt wurde.
Zum Beispiel, um den ersten Bildschirm mit Informationen aus einer Datei mit dem Namen anzuzeigentestfile.new, Sie könnten Folgendes verwenden:more < testfile.new
Sie können auch weiterleitenmoreals solche:type testfile.new | more

Pause- und Timeout-Befehle
Erwähnenswert ist, dass Sie, wenn Sie CMD-Befehle anstelle von Powershell-Cmdlets verwenden möchten, das verwenden könnenpauseUndtimeoutBefehle, da sie mit Powershell kompatibel sind.
Wenn Sie einfach das hinzufügenpauseWenn Sie Ihrem Skript einen Befehl hinzufügen, erhalten Sie bei der Ausführung die folgende oder eine ähnliche Meldung:
Drücken Sie die Eingabetaste, um fortzufahren.

Sie können verwendentimeoutWenn Sie stattdessen die Zeitspanne (in Sekunden) angeben möchten, die pausiert werden soll, bevor die Sitzung wie folgt fortgesetzt wird:timeout /t 7
Manchmal kann es vorkommen, dass Benutzer unbeabsichtigt eine Taste drücken, wodurch die Zeitüberschreitung abrupt beendet wird. Wenn Sie solche Tastenanschläge lieber ignorieren möchten, können Sie die verwenden/nobreakSchalter als solcher:timeout /t 7 /nobreak

