Я использую Javascript SDK виртуальной машины Azure в моем веб-приложении Node.js. Я пытаюсь использовать функцию RunCommand для запуска пользовательского сценария на моих виртуальных машинах Azure.
У меня проблема с получением ответа от запуска команды, которая должна содержать строки StdOut и StdErr.
Если я запускаю команду из интерфейса командной строки Azure, выполните следующие действия:
az vm run-command invoke -g 'myResource' -n 'myVm' --command-id RunPowerShellScript --scripts 'Get-ChildItem -Name'
Тогда я смогу получить ответ, например, (обратите внимание, что в разделе 'message' есть список файлов, возвращаемых из 'Get-ChildItem')
{
"value": [
{
"code": "ComponentStatus/StdOut/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "myTxtFile.txt\nscript12.ps1\nscript13.ps1\nscript14.ps1\nscript15.ps1\nscript16.ps1\nscript17.ps1\nscript18.ps1\nscript19.ps1\nscript20.ps1\nscript21.ps1\nscript22.ps1\nscript23.ps1\nscript24.ps1\nscript25.ps1\nscript26.ps1",
"time": null
},
{
"code": "ComponentStatus/StdErr/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": "",
"time": null
}
]
}
Однако, когда я запускаю этот код из javascript SDK, я ничего не получаю. Вот код:
let usr = ...;
let pas = ...;
let subscriptionId = ...;
let client = null;
msRestAzure.loginWithUsernamePassword(usr, pas, function(err, credentials) {
if (err) return console.log(err);
client = new azureArmCompute.ComputeManagementClient(credentials, subscriptionId);
let param = {
commandId: 'RunPowerShellScript',
script: [
'echo $null >> myTxtFile.txt\n' +
'Get-ChildItem -Name\n'
]
};
client.virtualMachines.runCommand('myResource', 'myVm', param, function (err, result) {
console.log(err);
console.log(result);
})
});
и вот что выводится на консоль:
null
{}
Я знаю, что скрипт действительно запущен, потому что я попытался и смог успешно создать текстовый файл (myTxtFile.txt).
Кто-нибудь знает, почему я ничего не получаю в результате объекта?
Редактировать 1 (в ответ на @Itay):
Глядя на источник, предполагается, что обратный вызов является «ServiceCallback» типа «RunCommandResult». Вот три объявления функций для RunCommand.
![RunCommand Function Declarations](https://i.stack.imgur.com/69lIf.png)
Вот объявление для интерфейса ServiceCallback.
![ServiceCallback interface](https://i.stack.imgur.com/dGwxM.png)
Так что в моем обратном вызове я ожидал, что будет четыре возврата "err" и "result" и "request" и "response" (очевидно, я опускаю последние два). В моем примере я печатаю объекты ошибок и результатов в консоль, но в объекте результатов ничего нет ...