使用Windows VM和azure-cli的Azure自定义脚本扩展:Publisher无效

时间:2017-10-24 16:45:25

标签: powershell azure automation cloud azure-cli

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

当我尝试在我创建的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到服务器并寻找一点点自动化。

我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

正如约翰所说,我们应该使用Microsoft.compute作为发布商,并使用CustomscriptExtension作为扩展名。

顺便说一下,我们应该使用--version 1.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存储帐户容器(类型:容器):

enter image description here 2. 在本地PC中创建json文件

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

enter image description here 3. 运行 CLI 2.0中的脚本:

enter image description here

enter image description here

答案 1 :(得分:1)

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

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

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