如何通过Azure PowerShell或AZ CLI复制Azure计划定义?
如何通过Azure PowerShell或AZ CLI复制Azure计划定义
当然可以通过代码实现Azure计划定义(Microsoft.Authorization/policySetDefinitions)的复制,以下是AZ CLI和Azure PowerShell的具体操作步骤:
使用AZ CLI复制
导出原计划定义的配置
运行命令获取原计划定义的JSON配置并保存到本地文件:# 订阅级别计划定义 az policy set-definition show --name "原计划定义名称" --subscription "你的订阅ID" > original_policy_set.json # 管理组级别计划定义 az policy set-definition show --name "原计划定义名称" --management-group "你的管理组名称" > original_policy_set.json修改配置文件
打开original_policy_set.json,修改以下关键字段:- 删除
id字段(创建新定义时会自动生成) - 将
name改为新的计划定义名称 - 更新
properties.displayName为新的显示名称 - 可选:修改
properties.description更新描述 - 移除
createdBy、createdOn、updatedBy、updatedOn这类自动生成的元数据字段
- 删除
创建新的计划定义
使用修改后的配置文件创建新计划:# 订阅级别创建 az policy set-definition create --subscription "目标订阅ID" --name "新计划定义名称" --definition "@original_policy_set.json" # 管理组级别创建 az policy set-definition create --management-group "目标管理组名称" --name "新计划定义名称" --definition "@original_policy_set.json"
使用Azure PowerShell复制
获取原计划定义对象
先获取要复制的计划定义:# 订阅级别计划定义 $originalPolicySet = Get-AzPolicySetDefinition -Name "原计划定义名称" -SubscriptionId "你的订阅ID" # 管理组级别计划定义 $originalPolicySet = Get-AzPolicySetDefinition -Name "原计划定义名称" -ManagementGroupName "你的管理组名称"复制并修改属性
克隆原对象后调整关键属性:$newPolicySet = $originalPolicySet.Clone() # 设置新的名称和显示名 $newPolicySet.Name = "新计划定义名称" $newPolicySet.Properties.DisplayName = "新的显示名称" # 可选:更新描述 $newPolicySet.Properties.Description = "自定义的新描述" # 清除自动生成的元数据和系统字段 $newPolicySet.Id = $null $newPolicySet.Type = $null $newPolicySet.Properties.Metadata.PSObject.Properties.Remove("CreatedBy") $newPolicySet.Properties.Metadata.PSObject.Properties.Remove("CreatedOn") $newPolicySet.Properties.Metadata.PSObject.Properties.Remove("UpdatedBy") $newPolicySet.Properties.Metadata.PSObject.Properties.Remove("UpdatedOn")创建新计划定义
执行命令完成创建:# 订阅级别创建 New-AzPolicySetDefinition -Name $newPolicySet.Name ` -PolicyDefinition $newPolicySet.Properties.PolicyDefinitions ` -DisplayName $newPolicySet.Properties.DisplayName ` -Description $newPolicySet.Properties.Description ` -SubscriptionId "目标订阅ID" # 管理组级别创建 New-AzPolicySetDefinition -Name $newPolicySet.Name ` -PolicyDefinition $newPolicySet.Properties.PolicyDefinitions ` -DisplayName $newPolicySet.Properties.DisplayName ` -Description $newPolicySet.Properties.Description ` -ManagementGroupName "目标管理组名称"
注意事项
- 操作前确保你的账号拥有Policy Set Definition Contributor或同等权限
- 如果原计划定义引用了其他策略定义,需保证目标订阅/管理组能访问这些被引用的定义
- 可根据实际需求调整配置中的额外属性,比如
properties.policyDefinitionGroups分组设置
内容的提问来源于stack exchange,提问作者greg
相关产品推荐
相关产品推荐

