如何通过PowerShell将变量传递给ARM模板的vmName参数
解决PowerShell变量传递到ARM模板vmName参数的问题
你的问题出在两个核心点:
- 脚本里的
-Name '$test'是指定部署任务的名称,和ARM模板中的vmName参数完全无关,根本没作用到虚拟机名称的设置上。 - 单引号包裹的
$test不会被PowerShell解析,就算是用来设置部署名称也不会生效。
另外,修改ARM模板的defaultValue没用——ARM模板无法直接读取PowerShell环境里的变量,必须通过部署命令主动传递参数才会覆盖默认值。
正确写法1:直接指定模板参数
在New-AzResourceGroupDeployment命令里直接添加-vmName参数并传入变量:
$test = "vmNAMEtest" New-AzResourceGroupDeployment ` -ResourceGroupName 'test' ` -DeploymentName $test ` # 如果需要自定义部署名称,直接用变量即可 -TemplateUri '.\Documents\azuredeploy.json' ` -vmName $test
正确写法2:用参数对象传递(适合多参数场景)
如果需要传递多个模板参数,建议用哈希表封装后通过-TemplateParameterObject传递:
$test = "vmNAMEtest" # 封装所有需要传递的模板参数 $templateParams = @{ vmName = $test # 可按需添加其他参数,比如 adminUsername = "adminuser" } New-AzResourceGroupDeployment ` -ResourceGroupName 'test' ` -DeploymentName $test ` -TemplateUri '.\Documents\azuredeploy.json' ` -TemplateParameterObject $templateParams
执行以上任意一种写法,ARM模板就会使用$test的值作为vmName,不再启用默认值。
内容的提问来源于stack exchange,提问作者EmployeeBoy
相关产品推荐
相关产品推荐

