使用 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
就可以实现。
请告诉我如何使用 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
就可以实现。