首页 > 解决方案 > 从 powershell 执行 PATCH api 调用

问题描述

我正在尝试从 powershell 运行以下 API 'Patch' 命令,我希望在 Azure DevOps 中执行一个版本......

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

网址示例如下

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

补丁调用的主体是......

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

从 powershell 运行调用命令会返回以下响应...

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"TF400898:发生内部错误。活动 ID:759888ab-9828-4cb6-b​​a2f-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.Framework.Server.UnauthorizedRequestException ,Microsoft.TeamFoundation.Framework.Server”,“typeKey”:“UnauthorizedRequestException”,“errorCode”:0,“eventId”:3000

任何想法我做错了什么?

标签: jsonpowershellapiazure-devops

解决方案


根据您的描述,当您从 Postman 调用此REST API时,响应返回错误:“message”:“TF400813: The user” is not authorized to access this resource.” 这个问题的原因是授权不正确。

请先在组织中创建一个新的个人访问令牌,然后在授权选项卡中选择类型:基本身份验证,并在右侧的密码输入框中输入您的 PAT。 在此处输入图像描述

当您从 powershell 调用此 REST API 时,响应返回错误:“TF400898:发生内部错误。活动 ID:759888ab-9828-4cb6-b​​a2f-e90cde1cd39a。” 此问题的原因是 Content-Type 不正确。

请使用 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

请参考以下步骤来创建 PAT

  1. 在您的主页上,打开您的用户设置,然后选择个人访问令牌。 在此处输入图像描述
  2. 在您的主页上,打开您的用户设置,然后选择个人访问令牌。为您的令牌命名,选择您要使用令牌的组织,然后为您的令牌选择一个生命周期。选择创建。 在此处输入图像描述
  3. 完成后,请确保复制令牌。为了您的安全,它不会再次显示。使用此令牌作为您的密码。

推荐阅读