Invoke-webrequest не работает внутри цикла foreach

Я пытаюсь выполнить цикл foreach, чтобы вытащить файл из AWS. Когда я запускаю Invoke-WebRequest -Uri $S3InstallerLoc -OutFile $S3OutFile вне цикла foreach на самом сервере, он вытягивает мой тестовый файл. Когда я вставляю его в цикл foreach, он не тянет файл вниз. Когда я пытаюсь сделать это с другого сервера, я получаю следующую ошибку: Invoke-WebRequest: базовое соединение было закрыто: при отправке произошла непредвиденная ошибка.

Вот весь сценарий:

$Servers = "AWS-GPOTEST"
$S3InstallerLoc = "https://s3-us-west-2.amazonaws.com/bucketname/test.txt"
$S3OutFile = "C:\Windows\Temp\Test.txt"

ForEach ($Server in $Servers)

{

Invoke-WebRequest -Uri $S3InstallerLoc -OutFile $S3OutFile

}
1
0
697
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете версию Powershell до 6.0 и запускаете ее в сеансе WinRM, вам следует использовать параметр UseBasicParsing.

Как в:

Invoke-Command -ComputerName $Servers -ScriptBlock {Invoke-WebRequest -Uri $Using:S3InstallerLoc -OutFile $Using:S3OutFile -UseBasicParsing}

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-6

Использование локальных переменных в скриптах:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_remote_variables?view=powershell-6#using-local-variables

Спасибо, -UseBasicParsing не пробовал. Одна из причин, по которой я отказался от Invoke-Command, заключалась в том, что я думал, что это не нужно, если вы выполняете цикл foreach, и я столкнулся со следующей ошибкой с предыдущим: «Невозможно проверить аргумент для параметра 'Uri'. Аргумент является пустым или пустым. Укажите аргумент, который не может быть пустым или пустым, а затем повторите команду ". Это сбивает с толку, потому что я думал, что аргумент, который я передал, действителен - это действительный URL-адрес https. Есть идеи, что могло быть причиной этого?

Heats 13.09.2018 20:40

Я исправил ошибку в своем первоначальном ответе. При использовании переменных в блоке сценария необходимо использовать $ using:, чтобы переменная передавалась правильно.

Jordan 13.09.2018 20:53

Я никогда не слышал о необходимости использовать $ using в блоке сценариев! Большое спасибо!

Heats 13.09.2018 21:27

Без проблем! docs.microsoft.com/en-us/powershell/module/…

Jordan 13.09.2018 21:35

Другие вопросы по теме