【问题标题】:Executing a PATCH api call from powershell从 powershell 执行 PATCH api 调用
【发布时间】:2021-02-17 09:38:51
【问题描述】:

我正在尝试从 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", “内部异常”:空, "message": "TF400813: 用户 '' 无权访问此资源。", "typeName": "Microsoft.TeamFoundation.Framework.Server.UnauthorizedRequestException, Microsoft.TeamFoundation.Framework.Server", "typeKey": "UnauthorizedRequestException", “错误代码”:0, “eventId”:3000

任何想法我做错了什么?

【问题讨论】:

    标签: json powershell api azure-devops


    【解决方案1】:

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

    请先在组织中创建一个新的个人访问令牌,然后在授权选项卡中选择类型: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
    

    请参考以下步骤至create a PAT

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

    【讨论】:

    • 非常感谢!我熟悉 PAT 令牌设置,但更改 api 调用中的内容类型以及正文的语法(以匹配您的!)为 powershell 脚本排序。
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多