使用 powershell 更新 Azure DevOps Wiki 页面

Update Azure DevOps Wiki pages use powershell

请告诉我如何使用 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

错误信息:

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"The page '/SamplePage129' specified in the add operation already exists in the wiki. Please specify a new page path.","typeName":"Microsoft.TeamFoundation.Wiki.Server.WikiPageAlreadyExistsException, Microsoft.TeamFoundation.Wiki.Server","typeKey":"WikiPageAlreadyExistsException","errorCode":0,"eventId":3000} At line:22 char:11 + $result = Invoke-RestMethod -Uri $uri -Method Put -ContentType "appli ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

首先,由于我们的document不太清楚,导致您收到此错误信息,我们深表歉意。

根据您分享的代码,我发现您没有在'If-Match[=42中传递当前页面的版本值=]' header 以及您的请求。

此 API 需要 header 值才能执行 UPDATE。否则,它会将操作视为“ADD”而不是“UPDATE”。这就是您收到该错误消息的原因。因此,要成功更新,您需要在 header.

中提供版本

要获取此页面的 'version',只需先 运行 对要编辑的页面进行 GET 调用。然后,响应中的 'ETag' 值 header 是您需要为下一个 UPDATE 操作传递的版本。

所以,只需修改您的header内容,在其中添加If-Match

$headers = @{
 'Authorization' = ('Basic {0}' -f $base64AuthInfo) 
 'If-Match' = '{version}' 
}

编辑: 由于 $result 默认内容是响应 body,但 ETag 存在于响应 Headers 中。所以你必须指定 Headers 才能得到它。

那么,在powershell中如何使用command得到这个ETag,只要使用$result.Headers.ETag就可以实现。