Я не могу загрузить файл .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\"
Вы можете просто использовать Invoke-WebRequest с параметром -OutFile.
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
$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:
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
Есть ли причина использовать HEAD? GET вроде работает