Wie kann ich in Powershell einen Download nach einer bestimmten Zeit wiederholen, wenn die Datei noch nicht existiert?

Wie kann ich in Powershell einen Download nach einer bestimmten Zeit wiederholen, wenn die Datei noch nicht existiert?

Ich habe ein Powershell-Skript, das Dateien wie diese herunterlädt:

powershell -Command `$progressPreference = 'silentlyContinue'; Invoke-WebRequest https://ftp.ncep.noaa.gov/data/nccf/com/cfs/prod/cfs/cfs.$m2/$m21z/6hrly_grib_04/pgbf$m2h.04.$m2h.grb2 -OutFile C:\OpenGrADS-2.2\data\cfs\cfs001.grb2`

Ist es möglich, vor dem Herunterladen zu prüfen, ob die Datei vorhanden ist? Wenn ja, laden Sie sie herunter. Wenn nicht, warten Sie eine bestimmte Zeit, bevor Sie es erneut versuchen.

Antwort1

Das folgende PowerShell-Skript erledigt diese Aufgabe.

Es ist aus dem Beitrag kopiert Remote-Datei mit Wiederholungsunterstützung herunterladen:

# $ErrorActionPreference = "Stop"
 
function DownloadWithRetry([string] $url, [string] $downloadLocation, [int] $retries)
{
    while($true)
    {
        try
        {
            Invoke-WebRequest $url -OutFile $downloadLocation
            break
        }
        catch
        {
            $exceptionMessage = $_.Exception.Message
            Write-Host "Failed to download '$url': $exceptionMessage"
            if ($retries -gt 0) {
                $retries--
                Write-Host "Waiting 10 seconds before retrying. Retries left: $retries"
                Start-Sleep -Seconds 10
 
            }
            else
            {
                $exception = $_.Exception
                throw $exception
            }
        }
    }
}
 
#
# Usage
DownloadWithRetry -url "http://example.com/file.zip" -downloadLocation "C:\Downloads\file.zip" -retries 6

verwandte Informationen