我在Node.js WebApp中使用Azure VM Javascript SDK。我正在尝试使用RunCommand Function在我的Azure虚拟机上运行自定义脚本。
我遇到的问题是从运行应包含StdOut和StdErr字符串的命令获取响应。
如果我从Azure CLI运行命令,则如下所示:
az vm run-command invoke -g 'myResource' -n 'myVm' --command-id RunPowerShellScript --scripts 'Get-ChildItem -Name'
然后我可以收到回复,例如(请注意,在“消息”部分中,列出了从“ 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):
从源头来看,回调应该是类型为“ RunCommandResult”的“ ServiceCallback”。这是RunCommand的三个函数声明。
因此,在我的回调中,我期望有四个返回值“ err”,“ result”,“ request”和“ response”(我显然省去了后两个)。在我的示例中,我将错误和结果对象打印到控制台,但是结果对象中没有任何内容...
答案 0 :(得分:0)
我认为您定义的回调的签名与文档中所描述的不一致。
从runCommand(string, string, RunCommandInput, ServiceCallback< RunCommandResult >)看,回调似乎应该接受RunCommandResult interface,后者包含一个名为Value
的属性,该属性是InstanceViewStatus interface实例的数组可能包含您要查找的信息。
希望有帮助!