Start-Sleep to cmdlet PowerShella, który wstrzymuje wykonanie skryptu lub sesji na zadany czas. Mówiąc wprost: to twój przycisk „poczekaj chwilę”. Przydaje się, gdy skrypt musi dać usłudze czas na start, odczekać między próbami połączenia albo nie zasypać API setką żądań na sekundę. To odpowiednik sleep z Linuksa, tyle że po windowsowemu — i z kilkoma smaczkami, o których warto wiedzieć.
Składnia i najważniejsze opcje
Podstawowa forma jest banalnie prosta:
Start-Sleep [-Seconds]
-Seconds— czas w sekundach. Nazwę parametru możesz pominąć albo skrócić do-s. Od PowerShella 6.2.0 przyjmuje też wartości ułamkowe (np. 1.5).-Milliseconds— czas w milisekundach, gdy potrzebujesz krótszej pauzy. Skrót:-m.-Duration— przyjmuje obiektTimeSpan, więc możesz podać czas czytelnie jako „2 minuty” zamiast liczyć sekundy. Dodany w PowerShellu 7.3.- Wartości ułamkowe — na starszych wersjach (Windows PowerShell 5.1)
-Seconds 1.5zostanie zaokrąglone; dokładność ułamków masz dopiero od 6.2.0.
Przykłady użycia
Start-Sleep -Seconds 5— wstrzymuje skrypt na 5 sekund. Klasyka.Start-Sleep 10— to samo co-Seconds 10, bo-Secondsjest parametrem pozycyjnym.Start-Sleep -Milliseconds 500— pół sekundy przerwy, np. między odpytaniami statusu.Start-Sleep -Duration (New-TimeSpan -Minutes 2)— czeka 2 minuty, czytelnie i bez mnożenia w głowie (PS 7.3+).1..5 | ForEach-Object { Write-Host "Próba $_"; Start-Sleep -Seconds 3 }— pauza 3 sekund między iteracjami, np. przy ponawianiu połączenia.
Częste błędy i pułapki
To nie jest asynchroniczne. Start-Sleep blokuje cały bieżący wątek — w tym czasie skrypt nie robi nic innego, także nie reaguje na kolejne polecenia w tej samej sesji konsoli. Jeśli chcesz opóźnienia w tle, potrzebujesz zadań (jobs) albo runspace’ów.
Ułamki na 5.1. Jeśli piszesz skrypt, który ma działać na Windows PowerShell 5.1, nie licz na -Seconds 0.5 — użyj -Milliseconds 500. Inaczej pauza może wyjść inna, niż zakładasz.
Alias sleep. W PowerShellu sleep 5 zadziała jako alias Start-Sleep, ale nie myl tego z linuksowym sleep 5m — tu przyrostków jednostek (m, h) nie ma. Sama liczba to zawsze sekundy.
Ctrl+C w trakcie. Długi Start-Sleep da się przerwać z klawiatury, ale w skrypcie uruchomionym nieinteraktywnie zablokuje wykonanie na cały zadany czas — nie stawiaj tam pauz liczonych w godzinach „na wszelki wypadek”.
Powiązane komendy: Wait-Event, Wait-Job, Wait-Process (czekanie na konkretne zdarzenie zamiast sztywnego czasu), New-TimeSpan (do budowania wartości dla -Duration) oraz linuksowy odpowiednik sleep.