【问题标题】:Powershell equivalent to Azure CLI "az vm run-command invoke"?Powershell 等效于 Azure CLI“az vm run-command invoke”?
【发布时间】:2018-12-28 14:40:15
【问题描述】:

我四处寻找通过 Windows 笔记本电脑上的 Powershell 在我的 Linux VM 上执行命令。我发现有 Azure CLI 命令az vm run-command invoke 来调用命令。

我在 powershell 中找到的只是Invoke-AzureRmVMRunCommand,它采用“脚本文件路径”(这意味着我必须先找到一种方法将脚本文件上传到 VM!真是麻烦!)而不是直接输入命令。

Powershell 中是否有 az vm run-command invoke 等效命令?

谢谢。

【问题讨论】:

  • 你的意思是要在Azure PowerShell命令中直接放一条命令在VM中执行?
  • 是的。我想把 shell 命令放在 Powershell 中。 Powershell 将与我的 Azure Linux VM 通信以在 VM 中执行该命令。用例是我想在不安装 Azure CLI 的情况下更改我的 Linux VM 的一些初始设置(例如 ssh 侦听端口、挂载 Azure 存储)。
  • 所以你可以看看这个命令Set-AzureRmVMExtension。还有例子here.
  • 谢谢@CharlesXu-MSFT 这似乎是我需要的。当我进行研究时,我可能遇到过该命令,只是文档描述非常混乱-在概述部分中,它正在讨论将下载脚本文件以执行,而在示例中它正在执行命令直接地。我会试试 Set-AzureRmVMExtension。
  • 太好了。如果您尝试过并且效果很好。请告诉我。

标签: powershell azure-cli


【解决方案1】:

结果,我误解了命令 Invoke-AzureRmVMRunCommand 。在命令 Invoke-AzureRmVMRunCommand 中,参数 ScriptPath 实际上是一个本地文件,而不是上传到 VM 上的文件。

所以我能做的就是将我所有的 bash 脚本放在与我的 Powershell 相同的目录下的文件 system_setup.sh 中并调用以下命令:

Invoke-AzureRmVMRunCommand -ResourceGroupName $ResourceGroupName -Name $VMName -CommandId 'RunShellScript' -ScriptPath '.\system_setup.sh'

然后 Azure 将在远程 Linux VM 上以 root 用户(不是为 VM 设置的 ssh 用户)上传并执行此 shell 脚本,该脚本位于 /var/lib/waagent/run-command/download/0 目录下

【讨论】:

    【解决方案2】:

    查看此 Microsoft 文档页面的 PowerShell 部分: https://docs.microsoft.com/en-us/azure/virtual-machines/windows/run-command#powershell

    这是我跑的一个简单的:

    $resource_name="myVM"
    $resource_group="myRG"
    az vm run-command invoke -g "${resource_group}" -n "${resource_name}" --command-id 
    RunPowerShellScript' --scripts "Write-Output 'testing russ'"
    

    输出是:

    {  "additionalProperties": {},  "endTime": "2018-07-25T00:09:42.479247+00:00",  error": null,  "name": "2a535b1a-e561-4a62-af43-c3c5c279bbcd",  "output": [    {      code": "ComponentStatus/StdOut/succeeded",      "displayStatus": "Provisioning ucceeded",      level": "Info",      "message": "testing russ"    },    {      "code": ComponentStatus/StdErr/succeeded",      "displayStatus": "Provisioning succeeded",      level": "Info",      "message": ""    }  ],  "startTime": "2018-07-5T00:09:09.605015+00:00",  "status": "Succeeded"}
    

    希望这会有所帮助。

    【讨论】:

    • 嗨 RuSs,感谢您的回复,但我正在寻找您答案的 powershell 版本。我知道“Invoke-AzureRmVMRunCommand”类似于“az vm run-command invoke”,但如果仔细检查,你会发现“Invoke-AzureRmVMRunCommand”只需要一个脚本文件,而“az vm run-command invoke”可以有直接命令其中。所以它是不等价的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多