2017-06-26 80 views
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

回答

3

這看起來不正確:

command = powershell.exe -command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File myFile.txt" 

你是否試圖運行這個PowerShell命令客戶端或Kudu方?我猜測捻角羚,在這種情況下,你需要逃避它。例如

command = "powershell.exe -command `"(gc myFile.txt) -replace 'foo', 'bar' | Out-File myFile.txt`"" 
+0

我厭倦了通過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

+0

這是路徑。它需要:command =「powershell -command'」(gc D:\ home \ site \ wwwroot \ myFile.txt) - 替換'foo','bar'| Out-File D:\ home \ site \ wwwroot \ myFile.txt'「」 – Kode