зеркало из https://github.com/dotnet/aspnetcore.git
48 строки
1.3 KiB
PowerShell
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..."
|