quickstarts/microsoft.devcenter/devbox-ready-to-code-image/tools/deployment-script-utils.ps1 (44 lines of code) (raw):

$ErrorActionPreference = "Stop" Set-StrictMode -Version Latest $ProgressPreference = 'SilentlyContinue' function RunWithRetries( [ScriptBlock] $runBlock, [ScriptBlock] $onFailureBlock = {}, [int] $retryAttempts = 5, [int] $waitBeforeRetrySeconds = 5, [bool] $ignoreFailure = $false, [bool] $exponentialBackoff = $true ) { [int] $retriesLeft = $retryAttempts while ($retriesLeft -ge 0) { try { & $runBlock break } catch { if ($retriesLeft -le 0) { if ($onFailureBlock) { & $onFailureBlock } if ($ignoreFailure) { Write-Host "[WARN] Ignoring the failure:`n$_`n$($_.ScriptStackTrace)" break } else { throw } } else { if ($exponentialBackoff) { $totalDelay = [Math]::Pow(2, $retryAttempts - $retriesLeft) * $waitBeforeRetrySeconds } else { $totalDelay = $waitBeforeRetrySeconds } Write-Host "[WARN] Attempt failed: $_. Retrying in $totalDelay seconds. Retries left: $retriesLeft" $retriesLeft-- Start-Sleep -Seconds $totalDelay } } } }