Azure Kudu API - 无法通过Azure自动化编辑Web.config

时间:2017-08-22 21:33:17

标签: azure azure-automation kudu

我正在尝试使用Kudu WebApp API和Azure自动化Runbook编辑我的WebApp的Web.config。

通过Kudu接口登录WebApp并在PowerShell调试器中执行代码会按预期删除XML节点:

$username = "`$myusername"
$password = "123456"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password))) 

$ProgressPreference="SilentlyContinue"

$apiUrl = "https://mysite.scm.azurewebsites.net/api/command"

$pscommand = $webConfigPath = "D:\home\site\wwwroot\Web.config"
[xml] $webConfigXML = Get-Content $webConfigPath
#remove the following handler in the <httpHanderls> section in the web.config
$targetName = "Sitecore.FeedRequestHandler"
$nodePath = "configuration/system.webServer/handlers/add[@name='{0}']" -f $targetName
$node = $webConfigXML.SelectSingleNode($nodePath)
if($node -ne $null)
{
    $webConfigXML.configuration.'system.webServer'.handlers.RemoveChild($node)
}
$webConfigXML.Save($webConfigPath)

$commandBody = @{
    command = "powershell -command `"$pscommand`""
}

Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -ContentType "application/json" -Body (ConvertTo-Json $commandBody)

但是,如果我尝试通过PowerShell ISE或Azure自动化Runbook运行它,则会产生以下错误:

  

程序'Web.config'无法运行:访问被拒绝行:1个字符:1 ..

     

Get-Content:找不到路径'D:\ home \ site \ wwwroot \ Web.config'   因为它不存在。

关于如何通过Azure自动化Runbook编辑Web.config的XML的任何想法?

1 个答案:

答案 0 :(得分:1)

查看您的代码,我认为这让两个模型混淆:

  1. 当您拨打/api/command API时,其中一些是通过http从外部拨打Kudu的。
  2. 当您尝试在本地文件系统上访问D:\home\site\wwwroot\Web.config时,其中一些是直接从Kudu内部运行的。
  3. 如果你在Kudu以外的任何地方跑步,

    2就没有机会工作。

    您需要做的是使用Kudu vfs API来读取文件,在本地修改它,然后使用vfs API将其保存回来。