aspnetcore/eng/scripts/Download.ps1

48 строки
1.3 KiB
PowerShell

<#
.SYNOPSIS
Downloads a given uri and saves it to outputFile
.DESCRIPTION
Downloads a given uri and saves it to outputFile
PARAMETER uri
The uri to fetch
.PARAMETER outputFile
The outputh file path to save the uri
#>
param(
[Parameter(Mandatory = $true)]
$uri,
[Parameter(Mandatory = $true)]
$outputFile
)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit
$maxRetries = 5
$retries = 1
while($true) {
try {
Write-Host "GET $uri"
Invoke-WebRequest $uri -OutFile $outputFile
break
}
catch {
Write-Host "Failed to download '$uri'"
$error = $_.Exception.Message
}
if (++$retries -le $maxRetries) {
Write-Warning $error -ErrorAction Continue
$delayInSeconds = [math]::Pow(2, $retries) - 1 # Exponential backoff
Write-Host "Retrying. Waiting for $delayInSeconds seconds before next attempt ($retries of $maxRetries)."
Start-Sleep -Seconds $delayInSeconds
}
else {
Write-Error $error -ErrorAction Continue
throw "Unable to download file in $maxRetries attempts."
}
}
Write-Host "Download of '$uri' complete, saved to $outputFile..."