gpt4 book ai didi

powershell - Azure DevOps Server Invoke-RestMethod错误:没有为 “PUT”请求提供API版本

转载 作者:行者123 更新时间:2023-12-02 23:52:07 25 4
gpt4 key购买 nike

基于Etienne Tremblay的PowerShell example,我尝试将数据传递到Azure DevOps Server(2019.0.1)REST API。

在此示例中,我想修改项目的描述文本(仅出于测试原因):

# DEMO 5 Update an environement build variable
Write-Host "Demo 5"
$projects.value | ForEach-Object {
$project = $_.name
$buildManagementAreaId = "efc2f575-36ef-48e9-b672-0c6fb4a48ac5"
$tfsBaseUrl = GetUrl -orgUrl $orgUrl -header $header -AreaId $buildManagementAreaId

# https://docs.microsoft.com/en-us/rest/api/azure/devops/build/definitions/list?view=azure-devops-rest-5.0
$relDefUrl = "$tfsBaseUrl$project/_apis/build/definitions?api-version=5.0"
Write-Host "Requesting URL: $relDefUrl" -ForegroundColor Yellow
$result = Invoke-RestMethod $relDefUrl -Method Get -ContentType "application/json" -Headers $header
$relDefs = $result.value

if($relDefs.count -gt 0){
Write-Host "$project $($relDefs.count) build def founds" -ForegroundColor Blue
$relDefs | ForEach-Object {

$relDef = $_
$relDefExpanded = Invoke-RestMethod "$($relDef.url)?`$Expand=Environments&api-version=5.0" -Method Get -ContentType "application/json" -Headers $header
$relDefExpanded.project.description = "Hallo!!!"

$body = $relDefExpanded | ConvertTo-Json -Depth 100 -Compress
$body = [System.Text.Encoding]::UTF8.GetBytes($body)

#ERROR OCCURS HERE
$updateResult = Invoke-RestMethod "$($relDef.url)?api-version=5.0" -Method Put -ContentType "application/json" -body $body -Headers $header
Write-host "Variable value after: $($updateResult.project.description)" -ForegroundColor Green
}
}
}

提示:
  • $projects之前在脚本(demo1)中定义
  • 原始脚本更改变量而不是描述(两个版本都不起作用)

  • 错误发生在:
    $updateResult = Invoke-RestMethod "$($relDef.url)?api-version=5.0" -Method Put -ContentType "application/json" -body $body -Headers $header 

    带有消息的 :
    Invoke-RestMethod: {"$ id": "1", "innerException": null, "message": "No API version provided for the" PUT "request The version must either be part of the" Accept "header (eg
    \ "application / json; api-version = 1.0 \") or as a query parameter (for example, "? api-version = 1.0")
    . Will "," type name ":" Microsoft.VisualStudio.Services.WebApi.VssVersionNotSpecifiedException,
    Microsoft.VisualStudio.Services.WebApi","typeKey":"VssVersionNotSpecifiedException","errorCode":0,"eventId":3000}
    In C:\Users\mkober\Desktop\Azure DevOps Console\WriteAPI.ps1:75 Zeichen:29
    + ... ateResult = Invoke-RestMethod "$($relDef.url)?api-version=5.0" -Metho ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

    最终到达网址:
    http://138.202.18.216:8070/Samples/19e02b27-74ab-40dd-a519-ece38fafa870/_apis/build/Definitions/11?revision=5?api-version=5.0

    最佳答案

    您只需要修复url,将?之前的api-version更改为&即可:

    ?revision=5&api-version=5.0
    revisionapi-version是参数,如果只有一个参数,则使用 ?,但是如果要使用更多参数,则需要在它们后面附加 &

    关于powershell - Azure DevOps Server Invoke-RestMethod错误:没有为 “PUT”请求提供API版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56956331/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com