PowerShell zum Herunterladen der Zip-Datei von der GitHub-API

Lesezeit: 2 Minuten

Ich möchte ein PowerShell-Skript schreiben, um das GitHub-Repo im ZIP-Format herunterzuladen, indem ich dieser Anweisung folge:
https://docs.github.com/en/rest/reference/repos#contents

$Token = 'MyUserName:MyPAT'
$Base64Token = [System.Convert]::ToBase64String([char[]]$Token)

$Headers = @{
    "Authorization" = 'Basic {0}' -f $Base64Token;
    "accept" = "application/vnd.github.v3+json"
    }

$Uri = "https://api.github.com/repos/{owner}/{repo}/zipball"
$r = Invoke-WebRequest -Headers $Headers -Uri $Uri -Method Get | Out-File "D:\MyRepo.zip"

Der Code hat die Zip-Datei heruntergeladen, aber ich habe diese Fehlermeldung erhalten, als ich versuchte, die Zip-Datei zu öffnen:

D:\MyRepo.zip
The archive is either in unknown format or damaged

Ich bin sehr neu in PowerShell, jede Hilfe ist willkommen!

  • Out-File würde eine Textdatei erstellen, keine Binärdatei.

    – Bill_Stewart

    1. März 2021 um 19:54 Uhr

Benutzer-Avatar
Reiches Moos

Eventuell muss man genauer hinschauen download-a-repository-archive-zip Anweisungen. Es besagt, dass die Antwort eine 302-Weiterleitung zur URL zum Herunterladen enthält. Invoke-WebRequest wird nicht automatisch umgeleitet, aber es werden die Antwortheader bereitgestellt.

Wenn Sie Ihre letzte Zeile ändern in:

$response = Invoke-WebRequest -Headers $Headers -Uri $Uri -Method Get 

Sie können die Header des $response-Objekts überprüfen und ein weiteres ausgeben Invoke-WebRequest mit denselben Headern und dem 302 Uri:

$RedirectedResponse = Invoke-WebRequest -Headers $Headers -Uri $RedirectedURI -Method Get 

$RedirectedResponse.Content enthält die verschlüsselten Dateiinhalte, die Sie decodieren und in Ihr lokales Dateisystem schreiben können.

BEARBEITEN: Ich bin zu einem System gekommen, auf dem ich Zugriff auf GitHub hatte, und habe das Skript getestet. Ich fand heraus, dass die erste Antwort ein Byte-Array mit dem Inhalt der ZIP-Datei enthielt. Diese Funktionalität ist zu nützlich, um sie nicht zu teilen! Hier ist ein Skript, das funktioniert, um ein Repo herunterzuladen:

$user="bjorkstromm"
$repo = 'depends'
$uri = "https://api.github.com/repos/$user/$repo/zipball/"
if(!$cred){$cred = Get-Credential -Message 'Provide GitHub credentials' -UserName $user}
$headers = @{
  "Authorization" = "Basic " + [convert]::ToBase64String([char[]] ($cred.GetNetworkCredential().UserName + ':' + $cred.GetNetworkCredential().Password)) 
  "Accept" = "application/vnd.github.v3+json"
}
$response = Invoke-WebRequest -Method Get -Headers $headers -Uri $uri
$filename = $response.headers['content-disposition'].Split('=')[1]

Set-Content -Path (join-path "$HOME\Desktop" $filename) -Encoding byte -Value $response.Content 

  • Vielen Dank und Entschuldigung, dass ich den Inhalt der Anweisungen verpasst habe 🙁

    – IT-Neuling

    1. März 2021 um 22:11 Uhr

1017030cookie-checkPowerShell zum Herunterladen der Zip-Datei von der GitHub-API

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy