Private/Invoke-EFRetry.ps1

function Invoke-EFRetry {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [scriptblock]$ScriptBlock,

        [string]$Operation = 'operation',

        [ValidateRange(0, 10)]
        [int]$RetryCount = $script:EFConfiguration.RetryCount,

        [ValidateRange(0, 60)]
        [int]$DelaySeconds = $script:EFConfiguration.RetryDelaySeconds
    )

    $attempt = 0
    while ($true) {
        try {
            return & $ScriptBlock
        }
        catch {
            if ($attempt -ge $RetryCount) {
                throw
            }

            $attempt++
            Write-EFLog -Level Warning -Message "$Operation failed; retrying." -Data @{
                attempt = $attempt
                error   = $_.Exception.Message
            }
            if ($DelaySeconds -gt 0) {
                Start-Sleep -Seconds $DelaySeconds
            }
        }
    }
}