Ошибка конечной точки команды API REST Kudu при выполнении powershell - PullRequest
0 голосов
/ 06 июня 2018

При попытке выполнить команду POST для / api / в соответствии с этим описанием возникает следующая ошибка:

PS C:\> $Result.Error
remove-item : The Win32 internal error "The handle is invalid" 0x6 occurred 
while getting the console mode. Contact Microsoft Customer Support Services.
At line:1 char:44
+ get-childitem * -recurse | remove-item -force
+                                            ~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [Remove-Item], HostExce 
   ption
    + FullyQualifiedErrorId : GetConsoleMode,Microsoft.PowerShell.Commands.Rem 
   oveItemCommand

Часть скрипта POSH, которую я использую для этогооперация:

$json = @"
{
    "command": 'powershell.exe -command `"get-childitem * -recurse | remove-item -force`"',
    "dir" : 'site\\wwwroot',
 }
"@

$kuduApiUrl = "https://$webAppName.scm.azurewebsites.net/api/command"

$progressPreference = "silentlyContinue"

$Result = Invoke-RestMethod -Uri $kuduApiUrl `
                        -Headers @{"Authorization"=$kuduApiAuthorisationToken;"If-Match"="*"} `
                        -Body $json `
                        -Method POST `
                        -ContentType "application/json"

Я нашел много блогов, в которых указывалось, что это связано с выводом интерактивной консоли, однако установка $ProgressPreference на SilentlyContinue не сильно помогла.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

После проверки этой проблемы на github правильная команда POSH должна быть:

get-childitem -recurse | remove-item -recurse -force

Она хорошо работает при выполнении непосредственно из консоли Kudu или даже REST API/ api / конечная точка команды

0 голосов
/ 06 июня 2018

Я не могу вспомнить проблему, которую вы упомянули.Я тестирую с помощью следующего кода, вы можете обратиться к нему.

$PublishingUsername = "`$userName"

$publishingPassword = "password"

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

$json = @"
{
    "command": 'powershell.exe -command `"get-childitem * -recurse | remove-item -force`"',
    "dir" : 'site\\wwwroot'
 }
"@

$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $PublishingUsername, $publishingPassword)))

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

Результат теста: Я также проверяю консоль kudu, что все элементы в папке site \ wwwroot удалены,

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...