Meester Start-Sleep: Pauzeer Scripts Efficiënt

De PowerShell Start-Sleep cmdlet of het sleep alias is een eenvoudige cmdlet met één doel: het pauzeren van een script. Wanneer uitgevoerd in de PowerShell-console, een script dat wordt uitgevoerd door de console of in de PowerShell ISE, pauzeert de cmdlet eenvoudigweg een script of module in de PowerShell-sessie totdat de vereiste tijd in seconden of milliseconden is verstreken.

Deze cmdlet is eenvoudig maar kan op verschillende manieren worden toegepast, waardoor scripters goed geschreven scripts kunnen maken.

Start-Sleep Gebruik

Het gebruik van de Start-Sleep cmdlet is uiterst eenvoudig, aangezien het uiteindelijk slechts twee parameters heeft! Laten we zeggen dat ik mijn script wil pauzeren omdat ik wacht op een ander omgevingsproces dat wordt uitgevoerd. Dat proces duurt ongeveer 10 seconden, en ik moet er zeker van zijn dat mijn script niet blijft draaien voordat dat externe evenement is voltooid.

Om het script 10 seconden te pauzeren, zou ik gewoon Start-Sleep -Second 10 gebruiken. Als ik heel precies wil zijn, zou ik ook de tijd in milliseconden kunnen specificeren als Start-Sleep -Milliseconds 10000.

Voorbeeld Context

Een van de meest voorkomende toepassingen van deze Start-Sleep cmdlet is binnen een while-lus. Een while-lus is een constructie in PowerShell die code uitvoert terwijl iets anders gebeurt. Een van de beste toepassingen van een while-lus is wachten tot iets anders gebeurt. In plaats van slechts te gokken hoelang een proces gaat duren en deze cmdlet direct uit te voeren.

Bijvoorbeeld moet je misschien wachten tot er een bestand in een map verschijnt. Misschien wordt dat bestand daar neergezet door andere software. Zodra het bestand zich in de map bevindt, moet je er wat code tegen draaien. Dit voorbeeld is een uitstekend voorbeeld van het gebruik van een while-lus en Start-Sleep.

In het onderstaande voorbeeld wacht mijn code tot het bestand C:\File.txt verschijnt. Als dit in een script stond, zou het het script pauzeren totdat dit evenement plaatsvond. Technisch gezien, hebben we Start-Sleep niet nodig om dit te doen, maar als het niet wordt gebruikt, kan deze code je computer lamleggen. De snelheid waarmee het voortdurend kan controleren op dit bestand, zou afhangen van PowerShell!

We hoeven dit bestand niet elke 0,0455 ms te controleren. In plaats daarvan zouden we die controle moeten vertragen en de test slechts elke vijf seconden moeten uitvoeren. Een while-lus vertragen is een uitstekend gebruik van het Start-Sleep-commando.

$filePath = 'C:\File.txt'
while (-not (Test-Path -Path $filePath)) {
    ## Wacht een specifiek interval
    Start-Sleep -Seconds 5
}

Voor een voorbeeld van het gebruik van deze cmdlet met een mooie voortgangsbalk, bekijk dit.

Source:
https://adamtheautomator.com/start-sleep/