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
相关产品推荐
相关产品推荐

