AzureRM 5.1.1中如何通过脚本覆盖模板参数动态命名VM?
解决AzureRM 5.1.1部署时覆盖模板参数的问题
你遇到的这个错误很典型——在AzureRM 5.1.1版本里,New-AzureRmResourceGroupDeployment并不支持直接在命令行末尾追加模板参数(比如-virtualMachineName)来覆盖参数文件里的值,这就是为啥你会收到“找不到匹配参数名”的报错。
下面给你两种靠谱的解决方法,不用创建多个参数文件就能动态命名VM:
方法1:用-TemplateParameterObject传递覆盖参数
这是这个版本里官方推荐的覆盖参数的方式,你只需要把要修改的参数做成一个哈希表,通过这个参数传递给部署命令就行,它会自动覆盖参数文件里的对应值。
直接上可用的脚本:
# 先定义要覆盖的参数键值对 $customParams = @{ virtualMachineName = "AS1FTW12" networkInterfaceName = "AS1FTW12NIC" networkSecurityGroupName = "MyNSGName" } # 执行部署,同时指定参数文件和自定义覆盖参数 New-AzureRmResourceGroupDeployment -ResourceGroupName "myRSG" ` -TemplateFile $server1TmpFile ` -TemplateParameterFile $serverParamFile ` -TemplateParameterObject $customParams
方法2:确认ARM模板的参数名是否完全匹配
另外也要检查下你的ARM模板里,对应的参数是不是真的叫virtualMachineName——ARM模板的参数名是大小写敏感的,如果模板里写的是VmName或者其他名称,那你命令里用virtualMachineName肯定会报错。打开你的模板文件,查看parameters节点下的定义,确保名称完全一致。
额外提示
要是以后你升级到Az模块(AzureRM的后续替代产品),就可以直接在命令行追加模板参数了,但鉴于你现在用的是5.1.1这个旧版本,方法1是最稳妥的实现动态命名的方式。
内容的提问来源于stack exchange,提问作者Shawn Hodgson
相关产品推荐
相关产品推荐

