Test-AzureRmResourceGroupDeployment 适用于 TemplateParameterFile 但不适用于 TemplateParameterObject

Test-AzureRmResourceGroupDeployment works with TemplateParameterFile but not TemplateParameterObject

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

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

我在我的实验室测试,我得到了和你一样的错误日志。根本原因是 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".