Azure DevOps管道PowerShell使用NonComplianceMessage参数报错如何解决
报错诱因
该报错的核心原因是Azure DevOps管道环境中加载的Az.Resources PowerShell模块版本过低。NonComplianceMessage是Az.Resources模块在3.2.0版本才新增的参数,你执行日志中显示当前管道加载的是3.1.0版本的整体Az模块集合,对应的Az.Resources版本低于3.2.0,因此无法识别该参数。
排查步骤
- 在你执行策略配置的PowerShell脚本开头添加如下命令,运行管道即可确认当前环境实际安装的
Az.Resources模块版本:Get-Module -Name Az.Resources -ListAvailable - 核对你使用的策略操作命令(如
New-AzPolicyDefinition、Set-AzPolicyDefinition等)的参数说明,低于3.2.0版本的Az.Resources模块确实不存在NonComplianceMessage参数。
修复方案
- 方案1:升级管道整体Az模块版本
直接在管道配置中指定使用4.0.0及以上版本的Az模块,该版本的Az集合内置的Az.Resources版本已满足参数要求。 - 方案2:单独升级
Az.Resources模块
如果无法升级整体Az模块,在执行策略配置命令前添加如下代码,单独安装符合版本要求的Az.Resources模块:Install-Module -Name Az.Resources -RequiredVersion 3.2.0 -Force -AllowClobber -Scope CurrentUser Import-Module Az.Resources -RequiredVersion 3.2.0 -Force - 方案3:不使用独立参数配置不合规消息
如果暂时无法升级模块,可以将不合规消息写入策略定义的metadata属性中,不需要调用NonComplianceMessage参数,示例写法如下:# 读取已有的策略定义文件 $policyContent = Get-Content "./your-policy-definition.json" | ConvertFrom-Json # 追加不合规消息配置 $policyContent.properties.metadata.nonComplianceMessages = @( @{ message = "资源不符合指定策略要求,请按规范调整配置" } ) # 创建/更新策略定义 New-AzPolicyDefinition -Name "your-policy-name" ` -Policy $policyContent.properties.policyRule ` -Parameter $policyContent.properties.parameters ` -Metadata $policyContent.properties.metadata
内容的提问来源于stack exchange,提问作者Kotha Ramesh Babu
相关产品推荐
相关产品推荐

