Das PowerShell-Cmdlet Start-Sleep oder der Alias sleep
ist ein einfaches Cmdlet mit einem einzigen Zweck: ein Skript anzuhalten. Wenn das Cmdlet in der PowerShell-Konsole, einem von der Konsole ausgeführten Skript oder in der PowerShell ISE ausgeführt wird, hält es lediglich die Ausführung eines Skripts oder Moduls in der PowerShell-Sitzung an, bis die erforderliche Zeit in Sekunden oder Millisekunden verstrichen ist.
Dieses Cmdlet ist einfach, kann aber auf verschiedene Arten angewendet werden, die es uns Skriptern ermöglichen, gut geschriebene Skripte zu erstellen.
Start-Sleep Usage
Das Verwenden des Cmdlets Start-Sleep ist extrem einfach, da es ja nur zwei Parameter hat! Nehmen wir an, ich möchte mein Skript anhalten, weil ich auf die Ausführung eines anderen Umgebungsprozesses warte. Dieser Prozess dauert etwa 10 Sekunden, und ich muss sicherstellen, dass mein Skript nicht weiterläuft, bevor dieses externe Ereignis abgeschlossen ist.
Um das Skript für 10 Sekunden anzuhalten, würde ich einfach Start-Sleep -Second 10
verwenden. Wenn ich es ganz genau nehmen will, könnte ich auch die Zeit in Millisekunden angeben: Start-Sleep -Milliseconds 10000.
Beispielkontext
Eine der häufigsten Verwendungen des Cmdlets Start-Sleep ist innerhalb einer while
-Schleife. Eine while
-Schleife ist ein Konstrukt in PowerShell, das Code ausführt, während etwas anderes geschieht. Eine der besten Verwendungsmöglichkeiten für eine while
-Schleife ist das Warten auf ein bestimmtes Ereignis. Anstatt nur zu schätzen, wie lange ein Prozess dauern wird, und dieses Cmdlet direkt auszuführen,
zum Beispiel müssen Sie vielleicht darauf warten, dass eine Datei in einem Ordner angezeigt wird. Vielleicht wird diese Datei von einer anderen Software dort abgelegt. Sobald sich die Datei in dem Ordner befindet, müssen Sie einen Code darauf ausführen. Dieses Beispiel ist ein hervorragendes Beispiel für die Verwendung einer while
-Schleife und Start-Sleep
.
Im folgenden Beispiel wartet mein Code auf das Auftauchen der C:\File.txt
-Datei. Wäre dies in einem Skript, würde es das Skript anhalten, bis dieses Ereignis eintritt. Technisch gesehen brauchen wir Start-Sleep
dafür nicht, aber wenn er nicht verwendet wird, könnte dieser Code Ihren Computer lahmlegen. Die Geschwindigkeit, mit der ständig nach dieser Datei gesucht wird, hängt von der PowerShell ab!
Wir müssen diese Datei nicht alle 0,0455 ms prüfen. Stattdessen sollten wir diese Prüfung verlangsamen und den Test nur alle fünf Sekunden durchführen. Das Verlangsamen einer while-Schleife ist eine hervorragende Verwendung des Befehls Start-Sleep
.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
Ein Beispiel für die Verwendung dieses Cmdlets mit einem schönen Fortschrittsbalken finden Sie hier.