使用 powershell 更新 Azure DevOps Wiki 页面

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

Mer*_*SFT 6

首先,很抱歉我们的文档不太清楚,因此您收到了此错误消息。

根据您共享的代码,我发现您没有在“ ”标头中随请求一起传递当前页面的版本值。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即可实现。