PowerShell Start-Sleep-cmdletten eller aliaset sleep
är en enkel cmdlet med ett enda syfte: att pausa ett skript. När den exekveras i PowerShell-konsolen, ett skript som exekveras av konsolen eller i PowerShell ISE, pausar cmdlet bara ett skript eller en modul i PowerShell-sessionen från att köras tills önskad tid i sekunder eller millisekunder har förflutit.
Denna cmdlet är enkel men kan ändå tillämpas på några olika sätt som gör det möjligt för oss scripters att greate välskrivna skript.
Start-Sleep Usage
Användning av Start-Sleep cmdlet är extremt enkelt eftersom det trots allt bara har två parametrar! Låt oss säga att jag vill pausa mitt skript eftersom jag väntar på att någon annan miljöprocess ska köras. Den processen tar cirka 10 sekunder och jag måste vara säker på att mitt skript inte fortsätter att köras innan den externa händelsen är klar.
För att pausa skriptet i 10 sekunder använder jag bara Start-Sleep -Second 10
. Om jag vill vara lite mer analytisk kan jag också ange tiden i millisekunder som Start-Sleep -Milliseconds 10000.
Exempelkontext
En av de vanligaste användningarna av den här cmdletten Start-Sleep är inne i en while
-slinga. En while
-slinga är en konstruktion i PowerShell som utför kod medan något annat händer. En av de bästa användningsområdena för en while
-slinga är att vänta på att något annat ska hända. Istället för att bara gissa hur lång tid en process kommer att ta och köra det här cmdlet direkt.
Till exempel kanske du behöver vänta på att en fil ska dyka upp i en mapp. Kanske släpps filen dit av någon annan programvara. När filen finns i mappen måste du köra någon kod mot den. Det här exemplet är ett utmärkt exempel på att använda en while
-slinga och Start-Sleep
.
I exemplet nedan väntar min kod på att filen C:\File.txt
ska dyka upp. Om detta fanns i ett skript skulle det pausa skriptet tills denna händelse inträffade. Tekniskt sett behöver vi inte Start-Sleep
för att göra detta, men om den här koden inte används kan den lamslå din dator. Hastigheten med vilken den kontinuerligt skulle kunna kontrollera den här filen skulle vara upp till PowerShell!
Vi behöver inte kontrollera den här filen var .0455ms. Istället bör vi sakta ner denna kontroll och endast utföra testet var femte sekund. Att sakta ner en while-slinga är en utmärkt användning av kommandot Start-Sleep
.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
För ett exempel på hur du kan använda den här cmdlet med en trevlig förloppsindikator kan du kolla in det här.