【问题标题】:Azure Custom Script Extensions with a Windows VM and azure-cli: Publisher is Invalid带有 Windows VM 和 azure-cli 的 Azure 自定义脚本扩展:发布者无效
【发布时间】:2018-04-05 13:38:03
【问题描述】:

我正在尝试在 Azure 上配置一些 VM,并在使用脚本对其进行自定义后立即进行配置。似乎最好的方法是使用自定义脚本扩展。

当我尝试在我创建的 VM 上执行 az extension set 时,它会爆炸并抱怨

参数发布者的值无效。

这大概是因为我将自己设置为发布者。而不是Microsoft.OSTCExtensions 或其他一些普遍接受的扩展发布者。

Custom Script Extension 这个名字对我来说意味着 CUSTOM 脚本可以通过这种方法进行链式加载。如果不先成为扩展发布者,这是不可能的吗?

我正在执行的命令:

设置扩展:

az vm extension set --resource-group dev-eu2 --vm-name dev-eu2-dc --name deploy_ad_to_eu2.ps1 --publisher "zimmertr" --settings /home/tj/git/Dev.Builder/azure-cli/script_extensions/domain_controller/dc_eu2.json --version v0.1

上述扩展调用的 JSON:

{
  "fileUris": ["http://localhost:8000/powershell/domain_controllers/deploy_ad_to_eu2.ps1"],
  "commandToExecute": "./deploy_ad_to_eu2.ps1"
}

这个 JSON 然后调用 deploy_ad_to_eu2.ps1,这是一个在我计算机上的文件服务器上运行的 Powershell 脚本。我知道这个 PowerShell 脚本是 100% 工作的,因为我可以将它复制粘贴到 PowerShell 提示符中而不会出现任何问题。我只是厌倦了 RDP 进入服务器并寻找一点自动化。

我在这里做错了吗?

【问题讨论】:

    标签: powershell azure automation cloud azure-cli


    【解决方案1】:

    正如Johan所说,我们应该使用Microsoft.compute作为发布者,使用CustomscriptExtension作为扩展名。

    顺便说一下,我们应该使用--version1.9,json应该是这样的:

    {
      "fileUris": ["https://jasonvmdiag956.blob.core.windows.net/jasonvmtest/jason.ps1"],
      "commandToExecute": "powershell.exe ./jason.ps1"
    }
    

    我们可以像这样在 Azure CLI 2.0 中运行这个脚本:

    az vm extension set --resource-group jasonvm --vm-name jasonvm --name CustomScriptExtension --publisher Microsoft.Compute --settings D:\cert\qq.json --version 1.9
    

    输出如下:

    C:\Users>az vm extension set --resource-group jasonvm --vm-name jasonvm --name CustomScriptExtension --publisher Microsoft.Compute --settings D:\cert\qq.json --version 1.9
    {| Finished ..
      "autoUpgradeMinorVersion": true,
      "forceUpdateTag": null,
      "id": "/subscriptions/5384xxxx-xxxx-xxxx-xxxx-xxxxe29axxxx/resourceGroups/jasonvm/providers/Microsoft.Compute/virtualMachines/jasonvm/extensions/CustomScriptExtension",
      "instanceView": null,
      "location": "eastus",
      "name": "CustomScriptExtension",
      "protectedSettings": null,
      "provisioningState": "Succeeded",
      "publisher": "Microsoft.Compute",
      "resourceGroup": "jasonvm",
      "settings": {
        "commandToExecute": "powershell.exe ./jason.ps1",
        "fileUris": [
          "https://jasonvmdiag956.blob.core.windows.net/jasonvmtest/jason.ps1"
        ]
      },
      "tags": null,
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "typeHandlerVersion": "1.9",
      "virtualMachineExtensionType": "CustomScriptExtension"
    }
    

    更新:

    我在实验室中测试了这个 PowerShell,它运行良好,这是我的步骤:
    1.上传该powershell脚本到Azure存储帐户容器(类型:容器):

    2.在本地电脑上创建json文件

    {
      "fileUris": ["https://jasonvmsdiag665.blob.core.windows.net/ps1/installad.ps1"],
      "commandToExecute": "powershell.exe ./installad.ps1"
    }
    

    3.在 CLI 2.0 中运行该脚本:

    【讨论】:

    【解决方案2】:

    发布者是指扩展本身的发布者,而不是要执行的脚本的发布者。发布者和名称的组合唯一标识了 哪个 扩展应用到虚拟机。

    Microsoft.Compute CustomScriptExtension 扩展(其中Microsoft.Compute 是发布者,CustomScriptExtension 是扩展名)是通用的,因为扩展执行的脚本是通过配置提供的。因此,无需为每个脚本发布一个扩展。

    换句话说,您不应该将自己指定为发布者,您应该指定扩展的实际发布者并使用配置来指定要执行的脚本。

    【讨论】:

    • 谢谢约翰!我认为我的问题的真正根源不是将powershell.exe 作为commandToExecute 字段的一部分传递。
    • 请看我对 Jason, Johan 的回复。它提供了对我现在遇到的另一个问题的深入了解。
    猜你喜欢
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多