blob: e4ebc8f3dc7af3eb71711357796fa499f635a8ef [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License
function Retry-Command
{
param (
[Parameter(Mandatory=$true)]
[string]$command,
[Parameter(Mandatory=$true)]
[hashtable]$arguments,
[Parameter(Mandatory=$false)]
[int]$retries = 5,
[Parameter(Mandatory=$false)]
[int]$secondsDelay = 2
)
$retrycount = 0
$done = $false
while (-not $done) {
try {
& $command @arguments
Write-Host ("Command [$command] succeeded.")
$done = $true
} catch {
$errorMessage = $_.Exception.Message
$failedItem = $_.Exception.ItemName
if ($retrycount -ge $retries) {
Write-Host ("Command [$command] failed the maximum number of $retrycount times.")
throw
} else {
Write-Host ("Command [$command] failed.`nError Message: $errorMessage`nRetrying in $secondsDelay seconds.")
Start-Sleep $secondsDelay
$retrycount++
}
}
}
}