Start Sleep - PowerShell


Overview

Start-Sleep is a PowerShell command that suspends the execution of the current script or command for a specified duration, providing a convenient way to introduce delays or pauses into your workflows. It’s commonly utilized in scenarios like throttling requests, simulating user interactions, or adding timeouts to operations.

Syntax

Start-Sleep [-Seconds] <Int64> [-Milliseconds] <Int64> [-Minutes] <Int64> [-Hours] <Int64> [-Days] <Int64> [-Filter] <String>

Options/Flags

  • -Seconds: Specifies the number of seconds to sleep.
  • -Milliseconds: Specifies the number of milliseconds to sleep.
  • -Minutes: Specifies the number of minutes to sleep.
  • -Hours: Specifies the number of hours to sleep.
  • -Days: Specifies the number of days to sleep.
  • -Filter: Allows filtering of results based on the Get-Date format string.

Examples

  • Sleep for 5 seconds:
Start-Sleep -Seconds 5
  • Sleep for 30 minutes:
Start-Sleep -Minutes 30
  • Sleep until a specific time (e.g., 10:00 AM):
Start-Sleep -Until (Get-Date -Format 'HH:mm:ss PM') -eq '10:00:00 AM'

Common Issues

  • Using negative values for time intervals will result in an error.
  • If the -Filter option is not properly formatted, it can lead to unexpected results.

Integration

  • Combine Start-Sleep with Get-EventLog to periodically check for new events:
$lastEvent = Get-EventLog -Newest 1
while ($true) {
    Start-Sleep -Seconds 5
    $newEvent = Get-EventLog -Newest 1
    if ($newEvent.Index -gt $lastEvent.Index) {
        # New event detected
    }
    $lastEvent = $newEvent
}
  • Use Start-Sleep with Invoke-Command to introduce delays in remote command execution:
Invoke-Command -ComputerName 'RemoteComputer' {
    Start-Sleep -Seconds 10
    Get-Process
}
  • Get-Date: Retrieves the current date and time.
  • Invoke-Command: Executes a command on a remote computer.