我试图在powershell脚本中覆盖模板参数文件中的某些属性,然后将对象传递给Test-AzureRmResourceGroupDeployment
cmdlet进行测试。以下作品;
Test-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile 'template.json' -TemplateParameterFile 'parameters.json'
但是,当我加载参数并传递对象时,它不起作用;
$params = Get-Content 'parameters.json' | Out-String | ConvertFrom-Json | ConvertPSObjectToHashtable
Test-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile 'template.json' -TemplateParameterObject $params.parameters
ConvertPSObjectToHashtable
函数是我得到的函数from here。
当我运行第二个命令时,我收到以下错误;
Code : InvalidTemplate
Message : Deployment template validation failed: 'The provided value for the template parameter 'location' at line '7' and column '22' is not valid.'.
Details :
为什么它不接受参数对象,我该如何解决?
答案 0 :(得分:1)
我在我的实验室测试,我得到了同样的错误日志。根本原因是Azure json模板如下所示:
"adminUsername": {
"value": "ghuser"
},
如果json模板如下所示,该功能将起作用。
"adminUsername":"ghuser"
您也可以在实验室中进行测试,如果将以下参数传输到-
TemplateParameterObject
,它就可以正常工作。
PS D:\compare> $parms
Name Value
---- -----
adminPassword ********
dnsLabelPrefix shuitest123
adminUsername shui
但是,您的$params.parameters
如下所示:
PS D:\compare> $params.parameters
Name Value
---- -----
adminPassword {value}
dnsLabelPrefix {value}
adminUsername {value}
您需要做的是将Azure参数json文件转换为adminUsername:shui
或修改json文件,如"adminUsername":"ghuser"
。