如何传递具有以下消息的异常?
Invoke-RestMethod:{“Message”:“ETag不代表资源的最新状态。”}
看到reference,我认为“传递If-Match: "*" header
”应该是关键,但不知道如何做到这一点。
注意:更新或删除文件时,将应用ETag行为。您可以传递If-Match:“*”标头以禁用ETag检查。
# Kudu auth information creation
$WebSiteName = Get-AutomationVariable -Name 'WebApps_name'
# Example: "WebApps04"
$username = Get-AutomationVariable -Name 'WebApps_deploy_username'
$password = Get-AutomationVariable -Name 'WebApps_deploy_password'
# Above are set by "Asset - Variable" of in Azure Automation account
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$userAgent = "powershell/1.0"
# Add-content dummy HTML file
$Filename = "sample1.html"
$a = "<HTML><BODY>Sample HTML Data " + $WebSiteName + "</BODY></HTML>"
$a | add-content $Filename
# Get-Content full path of HTML file
$b = get-content $Filename
$filepath = ($b).PSPath
# PUT HTML file $filepath as $Filename, by Kudu REST API
$apiUrl = "https://" + $WebSiteName + ".scm.azurewebsites.net/api/vfs/site/wwwroot/" + $Filename
Write-Output "putting ..."
Invoke-RestMethod `
-Uri $apiUrl `
-Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} `
-UserAgent $userAgent `
-Method PUT `
-InFile $filePath `
-ContentType "text/html"
Write-Output "This run is finished."
putting ...
Invoke-RestMethod : {"Message":"ETag does not represent the latest state of the resource."}
At line:30 char:1
+ Invoke-RestMethod `
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod],
WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
This run is finished.
答案 0 :(得分:7)
正如评论中暗示的那样,-Headers
参数接受带有多个键的哈希表,如下所示:
$Headers = @{
'Authorization' = ('Basic {0}' -f $base64AuthInfo)
'If-Match' = '*'
}
然后:
Invoke-RestMethod -Headers $Headers
答案 1 :(得分:1)
此代码工作正常...... !!!
# Above are set by "Asset - Variable" of in Azure Automation account
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$userAgent = "powershell/1.0"
# Add-content dummy HTML file
$Filename = "sample1.html"
$a = "<HTML><BODY>Sample HTML Data " + $WebSiteName + "</BODY></HTML>"
$a | add-content $Filename
# Get-Content full path of HTML file
$b = get-content $Filename
$filepath = ($b).PSPath
# Debug printing
Write-Output "debug printing ..." ;
Write-Output $username ;
Write-Output $WebSiteName ;
Write-Output $filepath ;
Write-Output $a ;
# PUT HTML file $filepath as $Filename, by Kudu REST API
$apiUrl = "https://" + $WebSiteName + ".scm.azurewebsites.net/api/vfs/site/wwwroot/" + $Filename
Write-Output "putting ..." ;
$HeaderValues = @{
'Authorization' = ('Basic {0}' -f $base64AuthInfo)
'If-Match' = '*'
}
# Invoking Rest Method Passing $HeaderValues as parameter
Invoke-RestMethod `
-Uri $apiUrl `
-Headers $HeaderValues `
-UserAgent $userAgent `
-Method PUT `
-InFile $filePath `
-ContentType "text/html"
Write-Output "This run is finished." ;