Test-AzureRmResourceGroupDeployment与TemplateParameterFile一起使用,但不与TemplateParameterObject一起使用

时间:2017-07-06 09:06:31

标签: powershell azure cmdlet

我试图在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 : 

为什么它不接受参数对象,我该如何解决?

1 个答案:

答案 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"