从 powershell 执行 PATCH api 调用

Bob*_*byS 1 api powershell json azure-devops

我正在尝试从 powershell 运行以下 API“Patch”命令,我希望在 Azure DevOps 中执行发布...

$deploy = Invoke-RestMethod -Uri $patchurl -Method Patch -Body $body -Headers $header -ContentType "application/json-patch+json"
Run Code Online (Sandbox Code Playgroud)

网址示例如下

https://vsrm.dev.azure.com/test/Fixed%20Income/_apis/Release/releases/567/environments/1072?api-version=6.0-preview.6
Run Code Online (Sandbox Code Playgroud)

补丁调用的主体是...

    "Status": "inProgress",
    "scheduledDeploymentTime": null,
    "comment": null,
    "variables": {}
Run Code Online (Sandbox Code Playgroud)

从 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

有什么想法我做错了吗?

Ali*_*SFT 5

根据您的描述,当您从Postman调用此REST API时,响应返回错误:“message”:“TF400813:用户”无权访问此资源。”此问题的原因是授权不正确。

请先在组织中创建一个新的个人访问令牌,然后在授权选项卡中选择类型: Basic Auth,并在右侧的密码输入框中输入您的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
Run Code Online (Sandbox Code Playgroud)

请参考以下步骤创建 PAT

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