#powershell
#powershell
Вопрос:
У меня есть скрипт powershell, который загружает файл, подобный этому:
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.2datacfscfs001.grb2`
Можно ли проверить, существует ли файл перед загрузкой, если да, то загрузите его, но если нет, то подождите определенный период времени, прежде чем повторять попытку.
Я уже пробовал это:
function Invoke-Download { param ( [Parameter()] [string] $uri = "https://ftp.ncep.noaa.gov/data/nccf/com/hrrr/prod/hrrr.$m2/conus/hrrr.t$m21z.wrfsfcf00.grib2.idx", [Parameter()] [string] $outputPath = "C:OpenGrADS-2.2datahrrrtest.grb2", [Parameter()] [int] $sleeptimer = 30, [Parameter()] [int] $maxTries = 3, [Parameter()] [int] $tries = 0 ) try { Invoke-WebRequest -Uri $uri -OutFile $outputPath; } catch [System.Net.WebException] { $tries ; if($tries -lt $maxTries) { Start-Sleep -Seconds $sleeptimer Invoke-Download -uri $uri -outputPath $outputPath -sleeptimer $sleeptimer -maxTries $maxTries -tries $tries } else { Write-Error ("Tried to download '{0}' {1}-times and failed" -f $uri, $tries); } } }
Но это тот результат, который я получил:
C:OpenGrADS-2.201-HRRRgt;powershell.exe -noexit -executionpolicy remotesigned -file "C:OpenGrADS-2.201-HRRR01-test.ps1" Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. Try the new cross-platform PowerShell https://aka.ms/pscore6 PS C:OpenGrADS-2.201-HRRRgt;
Комментарии:
1. Конечно, это возможно. Однако это неподходящий вопрос для stackoverflow. Это, вероятно, лучше подходит для другого форума, такого как serverfault или суперпользователь.
Ответ №1:
Спонтанно я бы сказал, что следующая функция должна выполнять все, что вы намереваетесь сделать. При условии, что удаленная станция отправляет код состояния 404:
function Invoke-Download { param ( [Parameter()] [string] $uri, [Parameter()] [string] $outputPath, [Parameter()] [int] $sleeptimer = 30, [Parameter()] [int] $maxTries = 3, [Parameter()] [int] $tries = 0 ) try { Invoke-WebRequest -Uri $uri -OutFile $outputPath; } catch [System.Net.WebException] { $tries ; if($tries -lt $maxTries) { Start-Sleep -Seconds $sleeptimer Invoke-Download -uri $uri -outputPath $outputPath -sleeptimer $sleeptimer -maxTries $maxTries -tries $tries } else { Write-Error ("Tried to download '{0}' {1}-times and failed" -f $uri, $tries); } } }
Не стесняйтесь, дайте мне знать, если ответ вам полезен.