Vit*_*nko 1 rest powershell azure-devops azure-devops-wiki
请告诉我如何使用 Rest API 和 powershell 更新(例如文本)Azure DevOps Wiki 页面。也许有人有一个更新 Wiki 页面的脚本。我可以使用此 powershell 脚本创建 Wiki 页面和内容。例如:
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
$uri = "https://dev.azure.com/fabrikam/{project}/_apis/wiki/wikis/{wikiIdentifier}/pages?path=SamplePage731&api-version=5.0"
$body = @"
{
"content": "test"
}
"@
$result = Invoke-RestMethod -Uri $uri -Method Put -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $body
Run Code Online (Sandbox Code Playgroud)
错误按摩:
Invoke-RestMethod : {"$id":"1","innerException":null,"message":"添加操作中指定的页面 '/SamplePage129' 已存在于 wiki 中。请指定新的页面路径。" ,"typeName":"Microsoft.TeamFoundation.Wiki.Server.WikiPageAlreadyExistsException, Microsoft.TeamFoundation.Wiki.Server","typeKey":"WikiPageAlreadyExistsException","errorCode":0,"eventId":3000} 位于第 22 行字符:11 + $结果 = Invoke-RestMethod -Uri $uri -Method Put -ContentType "appli ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke- RestMethod],WebException + FullQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
首先,很抱歉我们的文档不太清楚,因此您收到了此错误消息。
根据您共享的代码,我发现您没有在“ ”标头中随请求一起传递当前页面的版本值。If-Match
此 API 需要标头值才能执行UPDATE。否则,它将将该操作视为“ ADD ”而不是“ UPDATE ”。这就是您收到该错误消息的原因。因此,为了成功更新,您需要在标头中提供版本。
要获取此页面的“版本”,只需对您要首先编辑的页面运行 GET 调用即可。然后,'ETag'响应标头中的值是您需要为下一个 UPDATE 操作传递的版本。
因此,只需修改您的标头内容,在其中添加If-Match :
$headers = @{
'Authorization' = ('Basic {0}' -f $base64AuthInfo)
'If-Match' = '{version}'
}
Run Code Online (Sandbox Code Playgroud)
编辑:
由于$result默认内容是响应正文,但ETag存在于响应标头中。所以你必须指定Headers才能得到它。
那么,对于如何ETag在powershell中使用命令来获取它,只需使用$result.Headers.ETag即可实现。
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |