Start-Sleep

Wstrzymuje wykonanie skryptu na podaną liczbę sekund/milisekund.

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 obiekt TimeSpan, 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.5 zostanie 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 -Seconds jest 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.