1

我在我的 Node.js webApp 中使用Azure VM Javascript SDK 。我正在尝试使用RunCommand 函数在我的 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 的三个函数声明。 RunCommand 函数声明

这是 ServiceCallback 接口的声明。 服务回调接口

所以在我的回调中,我期望有四个返回“err”和“result”以及“request”和“response”(我显然忽略了后两个)。在我的示例中,我将错误和结果对象打印到控制台,但结果对象中没有任何内容......

4

1 回答 1

0

我认为您定义的回调的签名与文档中的描述不同。

查看runCommand(string, string, RunCommandInput, ServiceCallback< RunCommandResult >),似乎回调应该接受一个RunCommandResult 接口,该接口又包含一个名为的属性,该属性是一个InstanceViewStatus 接口Value实例的数组,可能包含您的信息正在找。

希望能帮助到你!

于 2019-01-13T11:37:03.200 回答