我希望能够在新创建的查询文件夹中创建查询。但是/我已经陷入了第一个操作:创建一个新的顶层文件夹。它不断抛出错误。 我对 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
将
{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
或像我的示例一样。