2015-09-25 67 views
1

我正在關注GitHub Releases的文檔,但我所得到的全部是資產內容。如何使用Powershell獲取Github發行資產的二進制版本?

這裏是我的PowerShell腳本:

$gitHubRepository = "<repo>" 
$gitHubUsername = "<username>" 
$gitHubApiKey = "<apikey>" 

# Locate Latest GitHub Release 
$releaseParams = @{ 
    Uri = "https://api.github.com/repos/$gitHubUsername/$gitHubRepository/releases"; 
    Method = 'GET'; 
    Headers = @{ 
     Authorization = 'Basic ' + [Convert]::ToBase64String(
      [Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic") 
     ); 
    } 
    ContentType = 'application/json'; 
    Body = (ConvertTo-Json $releaseData -Compress) 
} 

$result = Invoke-RestMethod @releaseParams 

$tag = $result.tag_name[0] 
Write-Host "Release $tag Found." 

$asset = $result.assets[0].url 
$ZipFile = $result.assets[0].name 
$asset 

$releaseAssetParams = @{ 
    Uri = $asset; 
    Method = 'GET'; 
    Headers = @{ 
     Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($gitHubApiKey + ":x-oauth-basic")); 
    } 
    ContentType = 'application/octet-stream'; 
} 

Invoke-RestMethod @releaseAssetParams -OutFile $ZipFile 

執行這個腳本(用正確設置的變量),輸出資產內容,而不是二進制文件(ZIP)文件符合市場預期。

內容類型未被識別嗎?

回答

2

您需要在Accept請求頭,而不是一個Content-Type請求標頭指定application/octet-stream,因爲你要告訴你,你接受,你不能送什麼什麼的服務器。

所以,你需要發送一個報頭是這樣的:

Accept: application/octet-stream 

,而不是

Content-Type: application/octet-stream 

來自API的響應將是一個重定向到具有實際資產的URL,所以你需要提出另一個請求(這是預期的行爲)。如果遇到問題,let us know

+0

在修復了不允許設置Accept Header的錯誤後,與Powershell 4.0協同工作。 –

+0

@SamTyson然後,不要忘記接受答案。 '':-) –