Загрузить файл JSON из REST API - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь экспортировать конвейер сборки из DevOps Azure, используя предоставляемый ими REST API.Я могу загрузить json-файл, используя приведенный ниже пример URL-адреса, который содержит определение сборки в формате json.

https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0-preview.7

Но когда я пытаюсь скачать с помощью powershell, я получаю HTML-файл с HTML-тегами.Но мне нужен только файл Json, который будет актуальным файлом определения сборки для загрузки.Ниже мой код PowerShell.Я также пытался использовать -ContentType "application / json", но это не помогло.

$strURL = "https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionId}?api-version=5.0-preview.7"
$filePath="C:\Pipeline_export"
$fileName=$filePath+"\build.json"
Invoke-RestMethod -Method Get -Uri $strURL  -OutFile $fileName

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

html - это, вероятно, страница с ошибкой о том, что вы не авторизовались правильно.

Я использую следующий код для запросов rest-api:

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "",$connectionToken)))
$result = Invoke-RestMethod -Uri $finalUrl -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

$finalUrl - этоURL ресурса, $connectionToken - это мой PersonalAccessToken

1 голос
/ 21 мая 2019

Согласно вашему коду вы можете потерять авторизованный токен в вашем коде. Так что это не работает с использованием -ContentType "application / json".

С другой стороны, мы также можем использовать другой способ авторизации кода: просто включите Разрешить сценариям доступ к токену OAuth , и скрипт сможет получить доступ к токену OAuth через System.AccessToken переменная.

Вот полный код, который может правильно получить файл Json, который был изменен на основе вашего кода (с System.AccessToken, а не PAT):

 $strURL = "https://dev.azure.com/{organization}/{project}/_apis/build/definitions/{definitionid}?api-version=5.0-preview.7"
 $filePath="D:\"
 $fileName=$filePath+"\build.json"
 $pipeline =Invoke-RestMethod -Uri $strURL -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"} -Method GET -OutFile $fileName

Перед локальной загрузкой файла Json вы можете использовать

Write-Host "Pipeline = $($pipeline | ConvertTo-Json -Depth 100)"

чтобы проверить, соответствует ли вывод в журналах PowerShell Script.

...