$attempt = 0
do {
    try {
        # Do something that has a high possiblity to crash.
        ping a

        if (-not $LASTEXITCODE) {
             $success = $true
        } else {
            throw "Transient error. LASTEXITCODE is $LASTEXITCODE."
        }
    }
    catch {
        if ($attempt -eq 5) {
            # You can do some extra logging here.
            Write-Error "Task failed. With all $attempt attempts. Error: $($Error[0])"
            throw
        }

        Write-Host "Task failed. Attempt $attempt. Will retry in next $(5 * $attempt) seconds. Error: $($Error[0])" -ForegroundColor Yellow
        Start-Sleep -Seconds $(5 * $attempt)
    }
    
    $attempt++
    
} until($success)

 

Running sample:

Failed:

 

PS C:\Users\AnduinXue\Desktop> .\test.ps1
Ping request could not find host a. Please check the name and try again.
Task failed. Attempt 0. Will retry in next 0 seconds. Error: Transient error. LASTEXITCODE is 1.
Ping request could not find host a. Please check the name and try again.
Task failed. Attempt 1. Will retry in next 5 seconds. Error: Transient error. LASTEXITCODE is 1.
Ping request could not find host a. Please check the name and try again.
Task failed. Attempt 2. Will retry in next 10 seconds. Error: Transient error. LASTEXITCODE is 1.
Ping request could not find host a. Please check the name and try again.
Task failed. Attempt 3. Will retry in next 15 seconds. Error: Transient error. LASTEXITCODE is 1.
Ping request could not find host a. Please check the name and try again.
Task failed. Attempt 4. Will retry in next 20 seconds. Error: Transient error. LASTEXITCODE is 1.
Ping request could not find host a. Please check the name and try again.
C:\Users\AnduinXue\Desktop\test.ps1 : Task failed. With all 5 attempts. Error: Transient error. LASTEXITCODE is 1.
At line:1 char:1
+ .\test.ps1
+ ~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,test.ps1

Transient error. LASTEXITCODE is 1.
At C:\Users\AnduinXue\Desktop\test.ps1:10 char:13
+             throw "Transient error. LASTEXITCODE is $LASTEXITCODE."
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Transient error. LASTEXITCODE is 1.:String) [], RuntimeException
    + FullyQualifiedErrorId : Transient error. LASTEXITCODE is 1.

Success one:

 

PS C:\Users\AnduinXue\Desktop> .\test.ps1

Pinging www.a.shifen.com [112.80.248.75] with 32 bytes of data:
Reply from 112.80.248.75: bytes=32 time=8ms TTL=56
Reply from 112.80.248.75: bytes=32 time=8ms TTL=56
Reply from 112.80.248.75: bytes=32 time=8ms TTL=56
Reply from 112.80.248.75: bytes=32 time=9ms TTL=56

Ping statistics for 112.80.248.75:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 8ms, Maximum = 9ms, Average = 8ms