你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
New-AzPolicyAssignment
创建或更新策略分配。
语法
New-AzPolicyAssignment
-Name <String>
[-Scope <String>]
[-NotScope <String[]>]
[-DisplayName <String>]
[-Description <String>]
[-Metadata <String>]
[-EnforcementMode <String>]
[-IdentityType <String>]
[-IdentityId <String>]
[-Location <String>]
[-NonComplianceMessage <PSObject[]>]
[-Override <IOverride[]>]
[-ResourceSelector <IResourceSelector[]>]
[-BackwardCompatible]
[-DefaultProfile <PSObject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
New-AzPolicyAssignment
-Name <String>
[-Scope <String>]
[-NotScope <String[]>]
[-DisplayName <String>]
[-Description <String>]
[-Metadata <String>]
[-EnforcementMode <String>]
[-IdentityType <String>]
[-IdentityId <String>]
[-Location <String>]
[-NonComplianceMessage <PSObject[]>]
[-Override <IOverride[]>]
[-ResourceSelector <IResourceSelector[]>]
[-BackwardCompatible]
[-PolicyDefinition <PSObject>]
[-DefinitionVersion <String>]
-PolicyParameterObject <Hashtable>
[-DefaultProfile <PSObject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
New-AzPolicyAssignment
-Name <String>
[-Scope <String>]
[-NotScope <String[]>]
[-DisplayName <String>]
[-Description <String>]
[-Metadata <String>]
[-EnforcementMode <String>]
[-IdentityType <String>]
[-IdentityId <String>]
[-Location <String>]
[-NonComplianceMessage <PSObject[]>]
[-Override <IOverride[]>]
[-ResourceSelector <IResourceSelector[]>]
[-BackwardCompatible]
[-PolicyDefinition <PSObject>]
[-DefinitionVersion <String>]
-PolicyParameter <String>
[-DefaultProfile <PSObject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
New-AzPolicyAssignment
-Name <String>
[-Scope <String>]
[-NotScope <String[]>]
[-DisplayName <String>]
[-Description <String>]
[-Metadata <String>]
[-EnforcementMode <String>]
[-IdentityType <String>]
[-IdentityId <String>]
[-Location <String>]
[-NonComplianceMessage <PSObject[]>]
[-Override <IOverride[]>]
[-ResourceSelector <IResourceSelector[]>]
[-BackwardCompatible]
-PolicyDefinition <PSObject>
[-DefinitionVersion <String>]
[-DefaultProfile <PSObject>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
New-AzPolicyAssignment cmdlet 使用给定的范围和名称创建或更新策略分配。 策略分配适用于其范围内包含的所有资源。 例如,在资源组范围内分配策略时,该策略将应用于该组中的所有资源。
示例
示例 1:订阅级别的策略分配
$Subscription = Get-AzSubscription -SubscriptionName 'Subscription01'
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Scope "/subscriptions/$($Subscription.Id)"
第一个命令使用 Get-AzSubscription cmdlet 获取名为 Subscription01 的订阅,并将其存储在$Subscription变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 最后一个命令在订阅范围字符串标识的订阅级别分配$Policy中的策略。
示例 2:资源组级别的策略分配
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId
第一个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组,并将其存储在$ResourceGroup变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 最后一个命令在由 $ResourceGroup ResourceId 属性标识的资源组级别分配$Policy中的策略。
示例 3:使用策略参数对象在资源组级别分配策略
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -BuiltIn | Where-Object {$_.DisplayName -eq 'Allowed locations'}
$Locations = Get-AzLocation | Where-Object displayname -like '*east*'
$AllowedLocations = @{'listOfAllowedLocations'=($Locations.location)}
New-AzPolicyAssignment -Name 'RestrictLocationPolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -PolicyParameterObject $AllowedLocations
第一个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组。 该命令将该对象存储在$ResourceGroup变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取允许位置的内置策略定义。 该命令将该对象存储在$Policy变量中。 第三个和第四个命令创建一个对象,其中包含名称中包含“east”的所有 Azure 区域。 命令将该对象存储在$AllowedLocations变量中。 最后一个命令使用$AllowedLocations中的策略参数对象在资源组级别$Policy分配策略。 $ResourceGroup的 ResourceId 属性标识资源组。
示例 4:使用策略参数文件在资源组级别分配策略
'{
"listOfAllowedLocations": {
"value": [
"westus",
"westeurope",
"japanwest"
]
}
}' > .\AllowedLocations.json
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -BuiltIn | Where-Object {$_.DisplayName -eq 'Allowed locations'}
New-AzPolicyAssignment -Name 'RestrictLocationPolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -PolicyParameter .\AllowedLocations.json
第一个命令在本地工作目录中创建名为 AllowedLocations.json 的参数文件。 第二个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组,并将其存储在$ResourceGroup变量中。 第三个命令使用 Get-AzPolicyDefinition cmdlet 获取允许位置的内置策略定义,并将其存储在$Policy变量中。 最后一个命令使用策略参数文件从本地工作目录AllowedLocations.json策略参数文件$ResourceGroup标识的资源组$Policy分配策略。
示例 5:使用系统分配的托管标识的策略分配
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -Location 'eastus' -IdentityType 'SystemAssigned'
第一个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组,并将其存储在$ResourceGroup变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 最后一个命令将$Policy中的策略分配给资源组。 系统分配的托管标识会自动创建并分配给策略分配。
示例 6:使用用户分配的托管标识的策略分配
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
$UserAssignedIdentity = Get-AzUserAssignedIdentity -ResourceGroupName 'ResourceGroup1' -Name 'UserAssignedIdentity1'
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -Location 'eastus' -IdentityType 'UserAssigned' -IdentityId $UserAssignedIdentity.Id
第一个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组,并将其存储在$ResourceGroup变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 第三个命令使用 Get-AzUserAssignedIdentity cmdlet 获取名为 UserAssignedIdentity1 的用户分配的托管标识,并将其存储在$UserAssignedIdentity变量中。 最后一个命令将$Policy中的策略分配给资源组。 通过将 Id* 属性传递给 IdentityId 参数,将$UserAssignedIdentity的 Id 属性标识的用户分配的托管标识分配给策略分配。
示例 7:具有强制模式属性的策略分配
$Subscription = Get-AzSubscription -SubscriptionName 'Subscription01'
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Scope "/subscriptions/$($Subscription.Id)" -EnforcementMode DoNotEnforce
第一个命令使用 Get-AzSubscription cmdlet 获取名为 Subscription01 的订阅,并将其存储在$Subscription变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 最后一个命令在订阅范围字符串标识的订阅级别分配$Policy中的策略。
分配使用 DoNotEnforce 的 EnforcementMode 值进行设置,即在资源创建或更新期间不会强制实施策略效果。
示例 8:使用不符合性消息的策略分配
$PolicySet = Get-AzPolicySetDefinition -Name 'VirtualMachinePolicySet'
$NonComplianceMessages = @(@{Message="Only DsV2 SKUs are allowed."; PolicyDefinitionReferenceId="DefRef1"}, @{Message="Virtual machines must follow cost management best practices."})
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicySetDefinition $PolicySet -NonComplianceMessage $NonComplianceMessages
第一个命令使用 Get-AzPolicySetDefinition cmdlet 获取名为 VirtualMachinePolicySet 的策略集定义,并将其存储在$PolicySet变量中。 第二个命令创建不符合性消息的数组。 整个分配的一条常规用途消息,一条消息特定于分配的策略集定义中的 SKU 限制策略。 最后一个命令将$PolicySet中的策略集定义分配给订阅,其中包含两条不合规消息,如果策略拒绝资源,则会显示这些消息。
示例 9:使用资源选择器分配策略
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
$ResourceSelector = @{Name = "MyLocationSelector"; Selector = @(@{Kind = "resourceLocation"; In = @("eastus", "eastus2")})}
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -ResourceSelector $ResourceSelector
第一个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 第二个命令创建一个资源选择器对象,该对象将用于指定赋值应仅适用于位于美国东部或美国东部 2 的资源,并将其存储在$ResourceSelector变量中。 最后一个命令使用$ResourceSelector指定的资源选择器将$Policy中的策略定义分配给订阅。
示例 10:包含替代的策略分配
$Policy = Get-AzPolicyDefinition -Name 'VirtualMachinePolicy'
$Selector = @{Kind = "resourceLocation"; In = @("eastus", "eastus2")}
$Override = @(@{Kind = "policyEffect"; Value = 'Disabled'; Selector = @($Selector)})
New-AzPolicyAssignment -Name 'VirtualMachinePolicyAssignment' -PolicyDefinition $Policy -Override $Override
第一个命令使用 Get-AzPolicyDefinition cmdlet 获取名为 VirtualMachinePolicy 的策略定义,并将其存储在$Policy变量中。 第二个命令创建指定美国东部或美国东部 2 个位置的位置选择器,并将其存储在$Selector变量中。 第三个命令创建一个替代对象,该对象将用于指定分配的定义应在$Selector对象标识的位置中具有禁用效果,并将其存储在$Override变量中。 最后一个命令使用$Override指定的替代将$Policy中的策略定义分配给订阅。
示例 11:使用策略参数对象在资源组级别分配策略
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -BuiltIn | Where-Object {$_.Properties.DisplayName -eq 'Allowed locations'}
$Locations = Get-AzLocation | Where-Object displayname -like '*east*'
$AllowedLocations = @{'listOfAllowedLocations'=($Locations.location)}
New-AzPolicyAssignment -Name 'RestrictLocationPolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -PolicyParameterObject $AllowedLocations
第一个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组。 该命令将该对象存储在$ResourceGroup变量中。 第二个命令使用 Get-AzPolicyDefinition cmdlet 获取允许位置的内置策略定义。 该命令将该对象存储在$Policy变量中。 第三个和第四个命令创建一个对象,其中包含名称中包含“east”的所有 Azure 区域。 命令将该对象存储在$AllowedLocations变量中。 最后一个命令使用$AllowedLocations中的策略参数对象在资源组级别$Policy分配策略。 $ResourceGroup的 ResourceId 属性标识资源组。
示例 12:使用策略参数文件在资源组级别分配策略
'{
"listOfAllowedLocations": {
"value": [
"westus",
"westeurope",
"japanwest"
]
}
}' > .\AllowedLocations.json
$ResourceGroup = Get-AzResourceGroup -Name 'ResourceGroup11'
$Policy = Get-AzPolicyDefinition -BuiltIn | Where-Object {$_.Properties.DisplayName -eq 'Allowed locations'}
New-AzPolicyAssignment -Name 'RestrictLocationPolicyAssignment' -PolicyDefinition $Policy -Scope $ResourceGroup.ResourceId -PolicyParameter .\AllowedLocations.json
第一个命令在本地工作目录中创建名为 AllowedLocations.json 的参数文件。 第二个命令使用 Get-AzResourceGroup cmdlet 获取名为 ResourceGroup11 的资源组,并将其存储在$ResourceGroup变量中。 第三个命令使用 Get-AzPolicyDefinition cmdlet 获取允许位置的内置策略定义,并将其存储在$Policy变量中。 最后一个命令使用策略参数文件从本地工作目录AllowedLocations.json策略参数文件$ResourceGroup标识的资源组$Policy分配策略。
参数
-BackwardCompatible
导致 cmdlet 使用旧格式在属性包对象中放置特定于策略的属性返回项目。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Confirm
提示你在运行 cmdlet 之前进行确认。
类型: | SwitchParameter |
别名: | cf |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DefaultProfile
DefaultProfile 参数不起作用。 如果对其他订阅执行 cmdlet,请使用 SubscriptionId 参数。
类型: | PSObject |
别名: | AzureRMContext, AzureCredential |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DefinitionVersion
指示策略定义或策略集定义的版本
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Description
如果发生策略冲突,此消息将是响应的一部分。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-DisplayName
策略分配的显示名称。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-EnforcementMode
策略分配强制模式。 可能的值为 Default 和 DoNotEnforce。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-IdentityId
与策略关联的用户标识。 用户标识字典密钥引用的格式为 ARM 资源 ID:“/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}”。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-IdentityType
标识类型。 这是将系统或用户分配的标识添加到资源时的唯一必填字段。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Location
策略分配的位置。 仅当使用托管标识时才需要。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Metadata
策略分配元数据。 元数据是一个开放结束的对象,通常是键值对的集合。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Name
策略分配的名称。
类型: | String |
别名: | PolicyAssignmentName |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-NonComplianceMessage
描述资源不符合策略的原因的消息。 若要构造,请参阅 NONCOMPLIANCEMESSAGE 属性的 NOTES 部分并创建哈希表。
类型: | PSObject[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-NotScope
策略的排除范围。
类型: | String[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Override
策略属性值重写。
类型: | IOverride[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-PolicyDefinition
接受策略定义或策略集定义对象
类型: | PSObject |
别名: | PolicySetDefinition |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | True |
接受通配符: | False |
-PolicyParameter
分配的策略规则的参数值。 键是参数名称。
类型: | String |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-PolicyParameterObject
分配的策略规则的参数值。 键是参数名称。
类型: | Hashtable |
Position: | Named |
默认值: | None |
必需: | True |
接受管道输入: | False |
接受通配符: | False |
-ResourceSelector
按资源属性筛选策略的资源选择器列表。
类型: | IResourceSelector[] |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Scope
策略分配的范围。 有效范围包括:管理组(格式:'/providers/Microsoft.Management/managementGroups/{managementGroup}')、订阅(格式:'/subscriptions/{subscriptionId}')、资源组(格式:'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}', 或资源(格式:'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}'
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-WhatIf
显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。
类型: | SwitchParameter |
别名: | wi |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
PSObject[]
String[]