azure - 使用 New-AzResourceGroupDeployment 将对象数组传递到二头肌模板

标签 azure azure-powershell azure-bicep

我有一个二头肌模板,其参数类型为“数组”。我试图给它的数组是一个对象数组。这是一个示例 Bicep,我在其中获取一个数组并以各种方式输出其中的一部分。

param rulesFromJson array

output FirstElement object = rulesFromJson[0]
output inputArray array = rulesFromJson
output FirstElementName string = rulesFromJson[0].name

这是一个示例参数文件:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "rulesFromJson": {
        "value": [
            {
              "ruleType": "NetworkRule",
              "name": "hello"
            },
            {
              "ruleType": "NetworkRule",
              "name": "goodbye"
            }
          ]
      }
    }
  }

如果我使用以下命令运行它,我会得到合理的输出:

New-AzResourceGroupDeployment -TemplateFile .\NetTest.bicep -ResourceGroupName 'ericNetworking' -TemplateParameterFile .\FWPolicyParam.json

DeploymentName          : NetTest
ResourceGroupName       : ericNetworking
ProvisioningState       : Succeeded
Timestamp               : 4/29/2022 5:14:06 PM
Mode                    : Incremental
TemplateLink            : 
Parameters              : 
                          Name             Type                       Value
                          ===============  =========================  ==========
                          rulesFromJson    Array                      [{"ruleType":"NetworkRule","name":"hello"},{"ruleType":"NetworkRule","name":"goodbye"}]

Outputs                 : 
                          Name                Type                       Value
                          ==================  =========================  ==========
                          firstElement        Object                     {"ruleType":"NetworkRule","name":"hello"}
                          inputArray          Array                      [{"ruleType":"NetworkRule","name":"hello"},{"ruleType":"NetworkRule","name":"goodbye"}]
                          firstElementName    String                     "hello"

但我想使用 -TemplateParameterObject 而不是使用参数文件来提供参数。因此,让我们构造一个与参数文件中相同的对象并将其输入:

$objArray1 = @()
$objArray1 += [pscustomobject]@{ruleType='NetworkRule';name='hello'}
$objArray1 += [pscustomobject]@{ruleType='NetworkRule';name='goodbye'}

New-AzResourceGroupDeployment -TemplateFile .\NetTest.bicep -ResourceGroupName 'ericNetworking' -TemplateParameterObject @{rulesFromJson = $objArray1}

据我所知,这应该做同样的事情。但我得到了一个错误。

New-AzResourceGroupDeployment: 1:24:37 PM - The deployment 'NetTest' failed with error(s). Showing 1 out of 1 error(s).
Status Message: The template output 'FirstElementName' is not valid: The language expression property 'name' doesn't exist, available properties are ''.. (Code:DeploymentOutputEvaluationFailed)
CorrelationId: xxxxxx

DeploymentName          : NetTest
ResourceGroupName       : ericNetworking
ProvisioningState       : Failed
Timestamp               : 4/29/2022 5:24:32 PM
Mode                    : Incremental
TemplateLink            : 
Parameters              : 
                          Name             Type                       Value
                          ===============  =========================  ==========
                          rulesFromJson    Array                      [{},{}]

Outputs                 : 
DeploymentDebugLogLevel : 

我在这里做错了什么?我的输入数组格式是否不正确?我注意到在上面的输出中,rulesFromJson 参数的值包含一个包含两个空白对象的数组,这很奇怪。

最佳答案

当二头肌参数的类型为“object”,并且输入通过 -TemplateParameterObject 传递时,它显然不需要传统的 PowerShell 对象,而是哈希表。

要使用上面的示例二头肌文件,您可以构造一个有效的参数并按如下方式运行它:

$objArray1 = @()
$objArray1 += @{ruleType='NetworkRule';name='hello'}
$objArray1 += @{ruleType='NetworkRule';name='goodbye'}

New-AzResourceGroupDeployment -TemplateFile .\NetTest.bicep -ResourceGroupName 'ericNetworking' -TemplateParameterObject @{rulesFromJson = $objArray1}

由于我有一个命令为我提供了 powershell 对象,因此我最终将其转换为哈希表,如下所述:PSCustomObject to Hashtable

关于azure - 使用 New-AzResourceGroupDeployment 将对象数组传递到二头肌模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72061789/

相关文章:

Azure服务总线订阅启用自动删除二头肌

c# - 如何在 azure 中使用一个(数据库)连接字符串与多个网站

azure - 创建 Azure Web App 失败,提示它已存在

azure - 使用 PowerShell 5+ 的 Azure 应用程序列表、创建日期、权限和 2FA 设置

azure - 尝试通过 bicep 获取 Azure DNS 入站终结点的 IP 地址

azure - 有条件地询问二头肌参数

azure - Azure Blob 存储中的 HTML 无法加载图标(错误 400)

azure - 在 Azure 应用服务上部署 docker 化镜像后应用程序运行失败

azure - 连接到 Azure Blob 存储

powershell - Azure Powershell 工作流 - 未找到输入参数