Загрузка файла Powershell с использованием базовой аутентификации - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь загрузить файл из репозитория JFrog с помощью PowerShell, но не могу заставить его работать.

Это ошибка, которую я получаю:

Exception calling "DownloadFile" with "2" argument(s): "The underlying connection was closed: An unexpected error
occurred on a send."
At     C:\Users\jelte\Documents\myproject\downloadExecutables1.ps1:16 char:1
+ $req.DownloadFile('https://myrepo.jfrog.io/myproject/libs-release-loca ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], 

MethodInvocationException

Код, который я использую:

$usernameVar = "JFROG_USERNAME"
$username = (get-item env:$usernameVar).Value

$passwordVar = "JFROG_PASSWORD"
$password = (get-item env:$passwordVar).Value

$auth = 'Basic ' + [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username+":"+$password))
$req = New-Object System.Net.WebClient
$req.Headers.Add('Authorization', $auth)
$installersFolder = $PSScriptRoot + '\prerequisites\executables'
If(!(test-path $installersFolder))
{
      New-Item -ItemType Directory -Force -Path $installersFolder
}

$req.DownloadFile('https://myrepo.jfrog.io/myproject/libs-release-local/binary/com/targetexecutable/9.3.240/executable-9.3.240.exe', $installersFolder + '\executable-9.3.240.exe')

То, что я пробовал:

  1. Загрузка файла с незащищенного сервера, который работает. Я подозреваю, что в базовой аутентификации что-то идет не так.
  2. Я проверил, введены ли имя пользователя и пароль, я также проверил, был ли правильный хэш base64.
  3. Перевод PowerShell в режим трассировки, чтобы я мог получать более четкие ошибки, не повезло. (Почему эти ошибки так неясны?)
  4. Используя Invoke-Webrequest, это работает, но очень медленно.
  5. Использование cURL для проверки того, что это что-то еще, также работает.

1 Ответ

0 голосов
/ 19 декабря 2018

Попробуйте добавить эти строки в начало вашего скрипта.

$AllProtocols = [System.Net.SecurityProtocolType]'Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols 

Я столкнулся с чем-то похожим без очень информативного сообщения об ошибке, и проблема была, очевидно, в том, что мне нужно было установить протокол безопасности, который использует powershell, в Tls 1.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...