Private/Invoke-AnyStackWithRetry.ps1
|
function Invoke-AnyStackWithRetry { [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAlignAssignmentStatement", "")] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseConsistentIndentation", "")] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseConsistentWhitespace", "")] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "")] param( [scriptblock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$DelaySeconds = 2 ) $attempt = 0 do { $attempt++ try { return & $ScriptBlock } catch { if ($attempt -ge $MaxAttempts) { throw } Write-Warning "Attempt $attempt failed. Retrying in $($DelaySeconds * $attempt)s..." Start-Sleep -Seconds ($DelaySeconds * $attempt) } } while ($attempt -lt $MaxAttempts) } |