Выполнение вызова api исправления из powershell

#json #powershell #api #azure-devops

#json #powershell #API #azure-devops

Вопрос:

Я пытаюсь запустить следующую команду API ‘Patch’ из powershell, которую я ищу для выполнения выпуска в Azure DevOps…

 $deploy = Invoke-RestMethod -Uri $patchurl -Method Patch -Body $body -Headers $header -ContentType "application/json-patch json"
  

Пример URL-адреса приведен ниже

 https://vsrm.dev.azure.com/test/Fixed Income/_apis/Release/releases/567/environments/1072?api-version=6.0-preview.6
  

Тело вызова исправления таково …

     "Status": "inProgress",
    "scheduledDeploymentTime": null,
    "comment": null,
    "variables": {}
  

Выполнение команды invoke из powershell возвращает следующий ответ …

Invoke-RestMethod : {«$id»:»1″,»InnerException»: null,»message»:»TF400898: произошла внутренняя ошибка. Идентификатор действия: 759888ab-9828-4cb6-ba2f-e90cde1cd39a.»,»typeName»: «System.Web.Http.HttpResponseException, System.Web.Http», «TypeKey»: «HttpResponseException», «ErrorCode»: 0, «EventID»: 0}

Когда я запускаю тот же URL-адрес для выполнения запроса «исправления» от Postman, я получаю приведенный ниже ответ, который я ожидаю получить от Powershell.

«$id»: «1», «InnerException»: null, «message»: «TF400813: пользователь » не авторизован для доступа к этому ресурсу.», «typeName»: «Microsoft.TeamFoundation.Фреймворк.Сервер.Исключение UnauthorizedRequestException, Microsoft.TeamFoundation.Фреймворк.Server», «TypeKey»: «UnauthorizedRequestException», «ErrorCode»: 0, «EventID»: 3000

Есть идеи, что я делаю не так?

Ответ №1:

Согласно вашему описанию, при вызове этого REST API из Postman в ответ возвращается ошибка: «сообщение»: «TF400813: пользователь»не авторизован для доступа к этому ресурсу». Причиной этой проблемы является неправильная авторизация.

Пожалуйста, сначала создайте новый токен личного доступа в организации, затем выберите тип: Basic Auth на вкладке Авторизация и введите свой PAT в поле ввода пароля справа. введите описание изображения здесь

При вызове этого REST API из powershell ответ возвращает ошибку: «TF400898: произошла внутренняя ошибка. Идентификатор действия: 759888ab-9828-4cb6-ba2f-e90cde1cd39a «. Причиной этой проблемы является неправильный тип содержимого.

Пожалуйста, используйте ContentType «application / json» вместо ContentType «application / json-patch json» .

 Script template:
$token = "PAT"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$url3="https://vsrm.dev.azure.com/{organization}/{project}/_apis/Release/releases/{releaseId}/environments/{environmentId}?api-version=6.0-preview.6"
  $body = "{
  `"status`": `"inProgress`",
  `"scheduledDeploymentTime`": null,
  `"comment`": null,
  `"variables`": {}
    }"
$response3 = Invoke-RestMethod -Uri $url3 -Headers @{Authorization = "Basic $token"} -Method Patch -Body $body -ContentType application/json
  

Пожалуйста, обратитесь к следующим шагам для создания исправления:

  1. На домашней странице откройте настройки пользователя, а затем выберите Личные токены доступа. введите описание изображения здесь
  2. На домашней странице откройте настройки пользователя, а затем выберите Личные токены доступа. Назовите свой токен, выберите организацию, в которой вы хотите использовать токен, а затем выберите срок службы для своего токена. Выберите Создать. введите описание изображения здесь
  3. Когда вы закончите, обязательно скопируйте токен. Для вашей безопасности он больше не будет отображаться. Используйте этот токен в качестве пароля.

Комментарии:

1. Большое спасибо! Я знаком с настройкой токена PAT, но изменение типа содержимого в вызове api вместе с синтаксисом тела (в соответствии с вашим!) отсортировало это для сценария powershell.