使用Azure的VM的Javascript SDK从RunCommand获取的StdOut(Get

2019-09-30 02:15发布

我使用Azure的VM的Javascript SDK在我的Node.js的Web应用程序。 我试图使用RunCommand功能对我的Azure的虚拟机上运行自定义脚本。

我遇到的问题是与获得运行应包含输出和错误字符串命令的响应。

如果我运行在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三个函数声明。

下面是该ServiceCallback接口的声明。

所以在我的回调,我期待在那里有四个回报“犯错”和“结果”和“请求”和“响应”(我明明离开关后两者)。 在我的例子,我打印的错误和结果对象到控制台,但结果对象没有了什么东西?

Answer 1:

我想为你定义的回调签名不是由文件描述。

综观runCommand(字符串,字符串,RunCommandInput,ServiceCallback <RunCommandResult>) ,似乎回调应当接受RunCommandResult接口 ,这反过来,包含一个称为属性Value ,其是阵列InstanceViewStatus接口实例可能保持的信息你正在寻找。

希望能帮助到你!



文章来源: Get StdOut from RunCommand using Azure VM Javascript SDK