PowerShell скачать exe из publi c Github - PullRequest
1 голос
/ 06 мая 2020

Я не могу загрузить файл .exe с Github. Скрипт работает для разных сайтов и без проблем скачивает файлы.

https://github.com/ShareX/ShareX/releases/tag/v13.1.0

Это файл .exe, который я пытаюсь скачать: https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe

>$DownloadUrl = "https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe"
>$WebResponse = Invoke-WebRequest -Uri "$DownloadUrl" -Method Head
Invoke-WebRequest : The remote server returned an error: (403) Forbidden.
At line:2 char:16
+ $WebResponse = Invoke-WebRequest -Uri "$DownloadUrl" -Method Head
+                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Полный сценарий:

[Net.ServicePointManager]::SecurityProtocol = "Tls, Tls11, Tls12, Ssl3"
$DownloadUrl = "https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe"
$WebResponse = Invoke-WebRequest -Uri "$DownloadUrl" -Method Head
Write-Output "Downloading $DownloadUrl"
Start-BitsTransfer -Source $WebResponse.BaseResponse.ResponseUri.AbsoluteUri.Replace("%20", " ") -Destination "C:\Users\Pegavo\Desktop\PS\"

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вы можете просто использовать Invoke-WebRequest с параметром -OutFile.

Invoke-WebRequest https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe -OutFile "ShareX-13.1.0-setup.exe"

Эта команда загрузит файл с GitHub и сохранит результат в файл в вашем текущем каталоге.

Или вы можете использовать WebClient.

$webClient = New-Object System.Net.WebClient
$webClient.DownloadFile("https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe", "E:\your\path\ShareX-13.1.0-setup.exe")

Я тестировал оба на своем локальном компьютере. Оба работали.

Более того, если вы хотите понять, почему Start-BitsTransfer не работает, здесь.

Изменить:

Вы можете получить имя файла автоматически, как это, используя Split-Path:

$url = "https://github.com/ShareX/ShareX/releases/download/v13.1.0/ShareX-13.1.0-setup.exe"
$file= Split-Path $url -Leaf #file is ShareX-13.1.0-setup.exe now
Invoke-WebRequest $url -OutFile $file
0 голосов
/ 06 мая 2020

Есть ли причина использовать HEAD? GET вроде работает

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