Azure Devops Rest-api 使用 powershell 查询查询文件夹结构

问题描述 投票:0回答:1

我希望能够在新创建的查询文件夹中创建查询。但是/我已经陷入了第一个操作:创建一个新的顶层文件夹。它不断抛出错误。 我对 powershell/rest-api 不是很有经验,微软提供的示例对新手没有太大帮助。

我尝试了这个并期望在查询文件夹结构中创建一个新文件夹: 我还尝试使用以下形式的绝对路径 name="/Shared Queries/Newfolder" 和 name="\Shared Queries\Newfolder",但出现同样的错误。

    $pat = "aaa"
    $organization="bbb"
    $project = "ccc"
    $Response=""
    $uri = "https://dev.azure.com/$organization/$project/_apis/wit/queries/{query}?api-version=7.1-preview.2"
    $body = @{
            name     = "Newfolder"
            isFolder = "true"
    }
    $jsonbody = ConvertTo-Json $body
    $headers = @{
        Authorization = "Basic {0}" -f [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($pat)"))
        "Content-Type"  = "application/json-patch+json"
    }
    $response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $jsonbody

-结果-

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"TF400898: An Internal Error Occurred. Activity Id: c110a6ff
-5b88-4868-a614-3c7cad2423b7.","typeName":"System.Web.Http.HttpResponseException, System.Web.Http","typeKey":"HttpResponseE
xception","errorCode":0,"eventId":0}
At C:\Users\harry\qry-topfolder.ps1:20 char:13
+ $response = Invoke-RestMethod -Uri $uri -Method Post -Headers $header ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExcepti 
   on
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
azure-devops azure-devops-rest-api
1个回答
0
投票

{query}
替换为
$uri
中的目标文件夹路径。示例:

$user = ""
$token = "<pat>" #https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page
$teamProject = "team_project_name"
$orgUrl = "https://dev.azure.com/<org>"
$targetQueryFolder = "Shared Queries" #should exist

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$queriesUrl = "$orgUrl/$teamProject/_apis/wit/queries/$($targetQueryFolder)?api-version=5.0"

$body = "{`"name`": `"Newfolder`", `"isFolder`": `"true`"}"

function InvokePostRequest ($PostUrl, $body)
{   
    return Invoke-RestMethod -Uri $PostUrl -Method Post -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}  -Body $body
}

InvokePostRequest $queriesUrl $body

此外,您的

$body
不是 JSON 格式。使用
ConvertTo-Json
或像我的示例一样。

© www.soinside.com 2019 - 2024. All rights reserved.