#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. Большое спасибо! Я знаком с настройкой токена PAT, но изменение типа содержимого в вызове api вместе с синтаксисом тела (в соответствии с вашим!) отсортировало это для сценария powershell.