PowerShell Start-Sleep-Befehl: Syntax, Beispiele

26. August 2021 7353 Ansichten Powershell-Schlaf

Müssen Sie ein PowerShell-Skript für eine Weile verzögern? Dann benötigen Sie den PowerShell-Start-Sleep-Befehl.





In diesem Leitfaden erfahren Sie alles, was Sie über PowerShell-Ruhezustand wissen müssen. Ich beginne die Anleitung, indem ich die Syntax des Start-Sleep-Befehls erkläre.



Dann, im letzten Abschnitt des Handbuchs, teile ich 9 Beispiele aus dem wirklichen Leben, wie man den Start-Sleep-Befehl verwendet.

Post-Themen durchsuchen



Powershell Sleep: Syntax des Start-Sleep-Cmdlets

Powershell Sleep: Syntax des Start-Sleep-Cmdlets

Hier ist die Syntax des Start-Sleep-Cmdlets:



|_+_| |_+_|

Dieses Cmdlet hat zwei Parameter

Millisekunden – Verwenden Sie es, um die Zeit (Int32) in Millisekunden anzugeben. PowerShell verzögert um die von Ihnen eingegebenen Millisekunden.



Wenn ich beispielsweise mein Skript um 300000 Millisekunden (5 Minuten) verzögern möchte, führe ich den folgenden Befehl aus:



|_+_|

Sekunden : Sie können die Verzögerungszeit auch in Sekunden angeben. Verwenden Sie dazu die Sekunden Parameter des Start-Sleep-Befehls.

Um mit dem letzten Beispiel fortzufahren und mein Skript um 5 Minuten (300 Sekunden) zu verzögern, führe ich den folgenden Befehl aus:

icloud Fotos werden nicht aktualisiert
|_+_|

Powershell-Schlafbeispiele

Dieser Abschnitt enthält einige Beispiele zur Verwendung von Powershell Sleep, um einige komplexe Aufgaben wie Countdown und mehr zu lösen.

So stellen Sie den PowerShell-Ruhezustand in Millisekunden, 1 Sekunde (oder weniger), Minuten oder für 1 Stunde ein

Wie ich im letzten Abschnitt erklärt habe, hat der Start-Sleep-Befehl zwei Syntaxen, wie unten gezeigt:

|_+_|

Verwenden Sie einen der folgenden Befehle, um PowerShell auf eine Verzögerung von 30000 Millisekunden (30 Sekunden) einzustellen:

|_+_|

Darüber hinaus können Sie den Millisekunden-Parameter verwenden, um den Ruhezustand auf weniger als 1 Sekunde einzustellen. Wenn Sie beispielsweise ein PowerShell-Skript um 0,0005 Sekunden (0,5 Millisekunden) verzögern möchten, können Sie einen der folgenden Befehle verwenden:

|_+_|

In meinem dritten Beispiel in diesem Unterabschnitt möchte ich PowerShell für 1 Stunde in den Ruhezustand versetzen. Der beste Ansatz ist hier, den Seconds-Parameter des Start-Sleep-Befehls zu verwenden.

Dazu müssen Sie jedoch 1 Stunde in Sekunden umrechnen. Das geht ganz einfach über die Suche Konvertieren Sie 1 Stunde in Sekunden bei google.

Das Ergebnis ist 3600 Sekunden. Um also ein PowerShell-Skript um 1 Stunde zu verzögern, verwenden Sie den folgenden PowerShell-Start-Sleep-Befehl:

|_+_|

Wie Sie dem folgenden Screenshot entnehmen können, ist die PowerShell-Eingabeaufforderung nicht verfügbar, bis die Verzögerung (1 Stunde) abgelaufen ist.

So stellen Sie den PowerShell-Ruhezustand in Millisekunden, 1 Sekunde (oder weniger), Minuten oder für 1 Stunde ein

Auf ähnliche Weise können Sie PowerShell mit dem folgenden Befehl für 5 Minuten in den Ruhezustand versetzen:

|_+_| 5 Minuten entsprechen 300 Sekunden

Verwendung von Powershell Sleep to Countdown (Start-Count-Funktion)

Ich habe eine PowerShell-Funktion (Start-Count) geschrieben, die nach unten oder oben zählt. Die Funktion hat 4 Parameter:

Countdown : Wenn Sie diesen Parameter angeben, zählt Start-Count ab einer bestimmten Zahl herunter
CountUp: Alternativ Angabe der Zusammenzählen Der Parameter bewirkt, dass Start-Count ab einer bestimmten Zahl aufwärts zählt
Zähle von : Nicht so wie Countdown und Zusammenzählen , erfordert dieser Parameter eine Eingabe. Verwenden Sie dies, um die Zahl anzugeben, von der abwärts oder aufwärts gezählt werden soll.
Zählen bis : Verwenden Sie diesen Parameter, um die Zahl anzugeben, bis zu der gezählt werden soll (abwärts oder aufwärts).

Führen Sie die folgenden Schritte aus, um die Start-Count-Funktion herunterzuladen und zu verwenden:

  1. Klicken Sie auf Download Start-Count.zip
  2. Entpacken Sie dann Start-Count.zip. Nach dem Entpacken sehen Sie einen Ordner namens Start-Count. Dieser Ordner enthält das PowerShell-Modul
  3. Kopieren Sie den Start-Count-Ordner in Ihren PowerShell-Module-Ordner. Diese befindet sich unter C:BenutzerProfilnameDokumenteWindowsPowerShellModules
  4. Entsperren Sie die heruntergeladene Moduldatei mit dem folgenden Befehl:
|_+_|
  1. Öffnen Sie schließlich PowerShell und führen Sie Start-Count aus. Im ersten Beispiel möchte ich von 10 auf 0 herunterzählen.
|_+_|

Der Befehl beginnt von 10 herunterzuzählen, bis er Null (0) erreicht. Siehe Screenshot unten…

Verwendung von Powershell Sleep to Countdown (Start-Count-Funktion)

In diesem zweiten Befehl zähle ich von 5 bis 40 hoch…

|_+_|

So verwenden Sie Powershell Sleep mit zufälliger Zeit

Wenn Sie Start-Sleep ausführen, zählt PowerShell vom oberen Ende der angegebenen Zeit herunter. Wenn ich beispielsweise Start-Sleep ausführe und 20 Sekunden festlege, zählt PowerShell um 1 Sekunde herunter.

Wenn Sie jedoch möchten, dass der Countdown randomisiert wird (d. h. um 2, 5, 6 herunterzählt), müssen Sie Start-Sleep und Get-Random kombinieren.

Wenn ich beispielsweise möchte, dass PowerShell in Intervallen zwischen 1 und 10 Sekunden in den Ruhezustand versetzt wird, führe ich den folgenden Befehl aus:

Windows Update bleibt bei ausstehender Installation hängen
|_+_|

Platzieren Sie diesen Befehl, bevor Sie die Befehle ausführen, die Sie mit zufälliger Verzögerung ausführen möchten …

So führen Sie Powershell Sleep bis zu einer bestimmten Zeit aus

In einigen PowerShell-Skripting-Szenarien möchten Sie möglicherweise den Ruhezustand bis zu einem bestimmten Zeitpunkt festlegen. Beispielsweise möchten Sie möglicherweise den Ruhezustand auf 30 Sekunden einstellen.

Um dies zu erreichen, benötigen Sie eine Machen , Noch bis Schleife.

In diesem Beispiel möchte ich, dass PowerShell in den Ruhezustand versetzt wird, bis der Timer 30 Sekunden erreicht.

Zuerst lege ich die Startzeit und die Endzeit fest. Die Startzeit ist die Zeit, ab der ich zählen möchte.

Der Einfachheit halber zähle ich ab 0.

Zuerst werde ich festlegen, von wo aus ich zählen möchte….

|_+_|

Dann stelle ich ein, wohin ich zählen möchte…

Das Setup konnte den Produktschlüssel nicht validieren
|_+_|

Jetzt werde ich verwenden Machen , Noch bis Schleife mit Start-Sleep wie im folgenden Skript gezeigt:

Führen Sie jeden Befehl einzeln aus |_+_| Ich habe das gesamte Do, Until-Skript in eine einzige Zeile eingefügt, damit ich es in PowerShell ausführen kann. Wenn Sie das Skript ausführen möchtenPowerShell-ISE, können Sie es wie folgt schreiben: |_+_|

Um das Skript jedoch in PowerShell auszuführen, führen Sie jeden der folgenden Befehle aus:

|_+_|

Der Befehl zählt von 0 bis 30 in 1-Sekunden-Intervallen. Siehe Screenshot unten…

So fügen Sie PowerShell Sleep nach oder vor einem Befehl hinzu

Dies ist ein sehr einfaches Beispiel. Wenn Sie nach einem PowerShell-Befehl eine Verzögerung hinzufügen möchten, fügen Sie den Start-Sleep-Befehl nach dem PowerShell-Befehl hinzu.

Um beispielsweise 5 Minuten Wartezeit nach dem Ausführen von Get-Process hinzuzufügen, verwenden Sie den folgenden Befehl:

|_+_|

Wie im folgenden Screenshot gezeigt, kehrt PowerShell nach Abschluss des Get-Process-Befehls nicht zu seiner Eingabeaufforderung zurück. Dies zeigt an, dass die Verzögerung von 5 Minuten (300 Sekunden) vorhanden ist.

So fügen Sie PowerShell Sleep nach oder vor einem Befehl hinzu

Auf der anderen Seite des obigen Beispiels können Sie auch PowerShell-Ruhezustand verwenden, um eine Verzögerung hinzuzufügen und dann einen Befehl auszuführen.

Anstatt Start-Sleep nach dem Befehl hinzuzufügen, fügen wir es dieses Mal vor dem Befehl ein …

|_+_|

Diesmal tritt die Verzögerung ein, bevor der Befehl ausgeführt wird.

So verwenden Sie PowerShell Sleep, um ein Skript zu wiederholen

Bei dem Versuch, eine Lösung dafür zu finden, fand ich ein vorhandenes Skript, das von a eingereicht wurde stackoverflow.com contributor (Ansgar Wiechers).

Ansgar hat die folgende Funktion erstellt. Er nannte es Retry-Command. Ich habe die Funktion in Redo-Command geändert, um ein von PowerShell genehmigtes Verb zu verwenden.

Ansonsten spreche ich Ansgar Wiechers meine volle Anerkennung aus. Hier ist das vollständige Skript…

|_+_|

Nun, ich habe auch das Skript hochgeladen, damit unsere Leser es herunterladen und verwenden können. Um die Funktion herunterzuladen und zu verwenden, gehen Sie wie folgt vor:

  1. Klicken Sie auf Redo-Command.zip herunterladen. Entpacken Sie dann die heruntergeladene ZIP-Datei.
  2. Kopieren Sie den entpackten Ordner Redo-Command nach c:usersDocumentsWindowsPowerShellModules
  3. Öffnen Sie dann PowerShell und führen Sie den folgenden Befehl aus – der Befehl entsperrt die Datei. Dadurch wird verhindert, dass PowerShell Sie ständig darauf hinweist, dass die Datei aus dem Internet heruntergeladen wurde
|_+_|
  1. Um schließlich die PowerShell-Funktion Sleep zu verwenden, um ein Skript zu wiederholen, führen Sie einen Befehl wie den folgenden aus:
|_+_|

Die Standardwiederholung ist 5 Mal. Wenn Sie jedoch eine benutzerdefinierte Wiederholung hinzufügen möchten, verwenden Sie den Maximum-Parameter wie unten gezeigt…

|_+_|

Im letzten Befehl erhalten Sie 8 Wiederholungen, bevor ein Fehler zurückgegeben wird.

So versetzen Sie ein PowerShell-Skript in den Ruhezustand, bis die Datei vorhanden ist

Um ein PowerShell-Skript in den Ruhezustand zu versetzen, bis eine Datei vorhanden ist, müssen Sie Test-Path und Start-Sleep in einer While-Schleife verwenden.

Hier ist die allgemeine Syntax der PowerShell-While-Schleife, die Sie benötigen:

|_+_|

Um ein Beispiel zu geben, werde ich überprüfen, ob eine Datei namens eventlog.txt in Laufwerk D existiert. Das Skript wird erst fortgesetzt, wenn die Datei verfügbar ist.

Hier ist das Skript…

|_+_|

Der Test-Path-Befehl prüft, ob eine Datei existiert. Wenn die Datei vorhanden ist, gibt Test-Path True zurück.

Existiert die Datei hingegen nicht, gibt Test-Path False zurück. Beim Hinzufügen ! vor Test-Path habe ich das Ergebnis umgekehrt.

Das Ergebnis in der While-Schleife ist also True, wenn die Datei nicht existiert.

Star Wars Battlefront Tastatur funktioniert nicht

Im Wesentlichen sagt der Befehl Folgendes: Wenn Test-Path d:eventlog.txt gleich ist Falsch (Die Datei existiert NICHT), zurück Wahr für die While-Schleife. Außerdem, was die While-Bedingung betrifft Wahr , führen Sie den Befehl Start-Sleep 10 aus (Verzögerung um 10 Sekunden).

Kehren Sie dann zum Bedingungsteil der While-Schleife zurück und prüfen Sie, ob die Datei existiert. Wenn nicht, warten Sie weitere 10 Sekunden. Diese Schleife wird fortgesetzt, bis die Datei existiert – dann wird die Schleife unterbrochen und PowerShell wird fortgesetzt.

Um dieses Skript zu testen, werde ich es zuerst ausführen (ohne die Datei d:eventlog.txt)

Wie im Screenshot unten zu sehen ist, wird die While-Schleife fortgesetzt, da die Datei nicht existiert.

So versetzen Sie ein PowerShell-Skript in den Ruhezustand, bis die Datei vorhanden ist

Um die Schleife zu unterbrechen, erstelle ich die Datei. Sobald ich die Datei erstellt habe, wird die While-Schleife unterbrochen und PowerShell wird fortgesetzt (siehe Screenshot unten):

So bringen Sie PowerShell dazu, für immer in den Ruhezustand zu wechseln, bis ich Strg + C drücke

Wenn Sie einen Befehl ausführen, den Sie nicht unterbrechen möchten, bis Sie Strg + C drücken, benötigen Sie die While-Schleife.

Um beispielsweise den PowerShell-Befehl – ​​Get-EventLog -LogName Application – für immer (kontinuierlich, bis Sie Strg + C drücken) auszuführen, verwenden Sie den folgenden Befehl:

|_+_|

Der Befehl macht Folgendes: Solange der Befehl im {}-Teil der While-Schleife wahr ist, wird die Ausführung fortgesetzt.

So schalten Sie PowerShell in den Ruhezustand, bis der laufende Prozess abgeschlossen ist

Dieses Beispiel ist das direkte Gegenteil des letzten Beispiels. Im letzten Beispiel habe ich einen Prozess kontinuierlich am Laufen gehalten.

In diesem Beispiel möchte ich jedoch, dass PowerShell in den Ruhezustand versetzt wird, bis der Vorgang abgeschlossen ist. Sobald der Prozess beendet ist, endet der Schlaf.

Wie im vorherigen Beispiel wird eine While-Schleife die Arbeit erledigen. Die Konfiguration der While-Schleife ist jedoch anders.

Dieses Mal habe ich den Befehl in den ()-Block der While-Schleife eingefügt. Allerdings muss ich ergänzen! vor dem Befehl.

Hier ist mein Beispiel…

|_+_|

Dieser Befehl sagt zu PowerShell, während (Get-EventLog -LogName Application) wahr ist, PowerShell für 5 Sekunden in den Ruhezustand versetzen. Nach dem Ruhezustand prüft PowerShell, ob der Befehl (Get-EventLog -LogName Application) noch ausgeführt wird.

Wenn es noch läuft, starten Sie den Ruhezustand für weitere 5 Sekunden. Diese Schleife wird fortgesetzt, bis der Befehl abgeschlossen ist …

Ich hoffe, Sie fanden diesen Leitfaden leicht verständlich und hilfreich! Wenn Sie den Leitfaden hilfreich fanden, stimmen Sie bitte Ja zu War dieser Beitrag hilfreich? unter.

Sie können auch detailliertes Feedback geben, indem Sie EINE ANTWORT HINTERLASSEN am Ende dieser Seite verwenden.

Schließlich finden Sie vielleicht unsere anderen PowerShell-Leitfäden hilfreich. Weitere aufschlussreiche PowerShell-Leitfäden finden Sie auf unserer Seite PowerShell & CMD Explained.

Amazon Bestellung nie geliefert

Eine weitere Sache, bevor Sie gehen: Wenn Sie PowerShell lernen möchten, sollten Sie unsere PowerShell-Tutorials-Seite mit einem Lesezeichen versehen.