具有 Windows VM 和 azure-cli 的 Azure 自定义脚本扩展:发布者无效

Azure Custom Script Extensions with a Windows VM and azure-cli: Publisher is Invalid

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

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

The value of parameter publisher is invalid.

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

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

我正在执行的命令:

设置分机:

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 提示符中。我只是厌倦了 RDPing 到服务器并寻找一点自动化。

我是不是做错了什么?

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

Microsoft.Compute CustomScriptExtension 扩展(其中 Microsoft.Compute 是发布者,CustomScriptExtension 是扩展的名称)是通用的,因为扩展要执行的脚本是通过馈送的配置。因此没有必要为每个脚本发布一个扩展。

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

正如 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.在您的本地 PC 中创建 json 文件

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

3.运行 CLI 2.0 中的脚本: