0
我需要修改Azure Web App的文件內容,例如Web.config和文本文件。使用捻命令行API,我能夠創建一個目錄,或使用類似下面的使用對象處理:通過Kudu命令API運行PowerShell以編輯文件
$username = "`$myuser"
$password = "mypass"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$apiUrl = "https://mywebapp.scm.azurewebsites.net/api/command"
$commandBody = @{
command = "md D:\home\site\wwwroot\newDirectory"
}
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -ContentType "application/json" -Body (ConvertTo-Json $commandBody) | Out-Null
我如何通過捻命令API修改文件?我的理想狀態是使用像在命令行API執行PowerShell中的以下內容:
powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File myFile.txt"
上面的命令工作,當我在捻接口的CMD調試控制檯輸入這一點,但我需要調用此通過API。我試過如下:
$username = "`$myuser"
$password = "mypass"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$apiUrl = "https://mywebapp.scm.azurewebsites.net/api/command"
$commandBody = @{
command = powershell.exe -command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File myFile.txt"
}
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST -ContentType "application/json" -Body (ConvertTo-Json $commandBody) | Out-Null
但是,它不編輯文件,而是拋出的錯誤:
不能施放Newtonsoft.Json.Linq.JObject到 Newtonsoft.Json.Linq .JToken
我厭倦了通過API的第二個選項,但它並沒有將foo的值更改爲bar。它可以從CMD調試控制檯使用powershell.exe -command「(gc myFile.txt) - 替換'foo','bar'| Out-File myFile.txt」。 Command API是否支持調用PowerShell?也許我需要更好地聲明文件的路徑(例如D:\ home \ site \ wwwroot \ myFile.txt) – Kode
這是路徑。它需要:command =「powershell -command'」(gc D:\ home \ site \ wwwroot \ myFile.txt) - 替換'foo','bar'| Out-File D:\ home \ site \ wwwroot \ myFile.txt'「」 – Kode