You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bicep循环创建策略修正任务报错:属性名称需为字符串

问题原因与修正方案

核心错误点

报错The language expression property '7' can't be evaluated, property name must be a string的直接原因是**policyRemediation.bicep中错误地对迭代对象使用了数组索引**:

在循环里,definition已经是policyDefinitions数组中的单个元素,你却尝试用definition[i].policyDefinitionId去访问属性——这会让Bicep把数字i(比如循环到第8个元素时i=7)当作对象的属性名解析,而对象属性名必须是字符串,因此触发报错。

修正后的policyRemediation.bicep代码

targetScope = 'managementGroup'

@description('The Policy Definitions that were applied')
param policyDefinitions array
@description('The Policy Assignment ID')
param policyAssignmentId string

resource remediateTask 'Microsoft.PolicyInsights/remediations@2021-10-01' = [for (definition, i) in policyDefinitions: {
  name: guid('Remediate-${definition.policyDefinitionId}')
  properties: {
    failureThreshold: {
      percentage: 1
    }
    resourceCount: 500
    policyAssignmentId: policyAssignmentId
    // 修正:直接访问当前迭代对象的属性,无需数组索引
    policyDefinitionReferenceId: definition.policyDefinitionId
    parallelDeployments: 10
    resourceDiscoveryMode: 'ExistingNonCompliant'
  }
}] 

额外潜在问题修正

你的main.bicep中引用了policyDefinitionsName.outputs.policyDefinitions,但缺少对policyDefinition.bicep模块的部署代码,需要补充:

// 先添加必要参数(根据你的实际场景调整)
param policies array
param initiativeName string
param location string
param roleDefinitionId string

// 引入policyDefinition模块
module policyDefinitionsName './modules/policyDefinition.bicep' = {
  name: 'policy-definitions'
  params: {
    policies: policies
  }
}

// 原有的initiative、policyAssignment等代码保持不变
module initiatives './modules/policyInitiative.bicep' =  {
  name: initiativeName
  params: {
    initiativeName: initiativeName
    policyDefinitions: policyDefinitionsName.outputs.policyDefinitions
  }
}

// ... 其余代码省略

内容的提问来源于stack exchange,提问作者johsandb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:30:00