Azure Kudu API - невозможно изменить Web.config с помощью службы автоматизации Azure

Я пытаюсь изменить файл Web.config своего WebApp с помощью Kudu WebApp API и Runbook автоматизации Azure.

Вход в WebApp через интерфейс Kudu и выполнение кода в отладчике 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 или модуль Runbook автоматизации Azure, он выдаст следующие ошибки:

Не удалось запустить программу Web.config: Доступ запрещен В строке: 1 символ: 1 ..

Get-Content: не удается найти путь «D: \ home \ site \ wwwroot \ Web.config», поскольку он не существует.

Есть идеи о том, как я могу редактировать XML файла Web.config с помощью модуля Runbook автоматизации Azure?


person Kode    schedule 22.08.2017    source источник
comment
Что именно вы подразумеваете под «отладчиком PowerShell»?   -  person David Ebbo    schedule 23.08.2017
comment
Консоль отладки Kudu. У него есть экран PowerShell   -  person Kode    schedule 23.08.2017


Ответы (1)


Глядя на ваш код, я думаю, что это сбивает с толку две модели:

  1. Некоторые из них написаны для вызова Kudu извне через http, когда вы вызываете /api/command API.
  2. Некоторые из них написаны для запуска непосредственно из Kudu, когда вы пытаетесь получить доступ к D:\home\site\wwwroot\Web.config в локальной файловой системе.

2 не будет работать, если вы бежите где-нибудь, кроме Куду.

Вместо этого вам нужно использовать vfs API Kudu, чтобы читать файл, измените его локально, а затем сохраните обратно с помощью API vfs.

person David Ebbo    schedule 22.08.2017
comment
Спасибо, Дэвид. Я думал, что это похоже на это (которое работает для удаленного вызова PowerShell с помощью Kudu): stackoverflow.com/questions/44766365/ - person Kode; 23.08.2017