PowerShell function to execute a command with retry support.
function Execute-WithRetry([ScriptBlock] $command)
{
$attemptCount = 0
$operationIncomplete = $true
$maxFailures = 5
$sleepBetweenFailures = 1
while ($operationIncomplete -and $attemptCount -lt $maxFailures)
{
$attemptCount = ($attemptCount + 1)
if ($attemptCount -ge 2)
{
Write-Host "Waiting for $sleepBetweenFailures seconds before retrying..."
Start-Sleep -s $sleepBetweenFailures
Write-Host "Retrying..."
}
try
{
# Call the script block
& $command
$operationIncomplete = $false
}
catch [System.Exception]
{
if ($attemptCount -lt ($maxFailures))
{
Write-Host ("Attempt $attemptCount of $maxFailures failed: " + $_.Exception.Message)
}
else
{
throw
}
}
}
}
# -----------------------------------------------------------------------
# Example Usage:
# -----------------------------------------------------------------------
# Start App Pool
Execute-WithRetry
{
$state = Get-WebAppPoolState $applicationPoolName
if ($state.Value -eq "Stopped")
{
Write-Host "Application pool is stopped. Attempting to start..."
Start-WebAppPool $applicationPoolName
}
}
#
# Similar pattern used here:
# https://github.com/ewoutkramer/fhir-net-api/blob/master/build/build.ps1