powershell修复ad域对象权限冲突需先识别异常权限、恢复默认继承或重置acl,而非盲目赋权;常见表现包括属性修改失败、gpo链接异常、加域拒绝访问等,根源多为dacl被手动修改、继承禁用或存在显式拒绝ace。
powershell 修复 ad 域对象权限冲突,核心在于精准识别异常权限、还原默认继承或重置 acl,而非盲目赋权。权限冲突常表现为:用户/组无法修改自身属性、gpo 链接失败、计算机加域报“拒绝访问”、组策略编辑器中对象灰色不可编辑等——这些往往不是账户被禁用,而是其父容器或自身安全描述符(sd)的 dacl 被手动修改、继承被禁用,或 ace(访问控制项)存在显式拒绝。
确认权限异常对象与继承状态
先定位问题对象是否启用了继承,再检查其 DACL 是否含异常拒绝项或缺失关键组权限:
- 用 Get-ADObject 查看目标对象(如 OU、用户、计算机)的 ProtectedFromAccidentalDeletion 和 SecurityDescriptor 属性是否被非预期修改
- 运行:
Get-Acl "AD:CN=TestUser,OU=Users,DC=contoso,DC=com" | Format-List
观察 Access 列表中是否存在 Deny 类型 ACE,尤其针对 Authenticated Users 或 Domain Admins - 检查继承是否关闭:
(Get-ADObject "CN=TestUser,OU=Users,DC=contoso,DC=com" -Properties nTSecurityDescriptor).nTSecurityDescriptor.AreAccessRulesProtected
返回 True 表示继承已禁用,需谨慎处理
恢复默认继承并清理显式拒绝项
对绝大多数生产环境,优先启用继承并移除手工添加的拒绝规则,而非逐条重设权限:
- 启用继承(适用于 OU 或容器):
Set-ADObject "OU=Sales,DC=contoso,DC=com" -Replace @{ntSecurityDescriptor="Inherit"} - 若需清除所有自定义 ACE 并仅保留继承权限,可用:
$acl = Get-Acl "AD:OU=Sales,DC=contoso,DC=com"
$acl.SetAccessRuleProtection($false, $true)
Set-Acl "AD:OU=Sales,DC=contoso,DC=com" $acl
其中 $false 表示启用继承,$true 表示移除所有现存显式 ACE - 对单个用户/计算机对象,也可用 Reset-ComputerMachinePassword 或 netdom resetpwd 重建安全通道,间接刷新其与域控制器间的信任上下文权限
验证关键系统组权限是否完整
某些操作失败,根源是 Domain Admins、Enterprise Admins 或 Creator Owner 缺失必要权限。可使用 PowerShell 批量校验:
- 检查 OU 下所有子对象是否对 Domain Admins 具备完全控制:
Get-ADObject -SearchBase "OU=Workstations,DC=contoso,DC=com" -Filter * -Properties nTSecurityDescriptor | ForEach-Object {
$sd = $_.nTSecurityDescriptor
$daAce = $sd.Access | Where-Object {$_.IdentityReference -eq "CONTOSO\Domain Admins" -and $_.ActiveDirectoryRights -match "GenericAll"}
if (-not $daAce) { Write-Warning "$($_.DistinguishedName) 缺少 Domain Admins 完全控制权限" }
} - 如发现缺失,用 Set-Acl 添加标准 ACE,但建议在测试环境先行验证,避免覆盖关键保护规则
预防后续权限漂移
权限冲突多源于人工误操作。建议建立常态化防护机制:
- 对核心 OU(如 Users、Computers、Domain Controllers)启用 ProtectedFromAccidentalDeletion 属性:
Set-ADOrganizationalUnit "OU=Users,DC=contoso,DC=com" -ProtectedFromAccidentalDeletion $true - 禁用非管理员账户对敏感容器的写权限,通过 GPO 限制 RSAT 工具使用范围
- 定期导出关键对象权限快照:
Get-Acl "AD:OU=Users,DC=contoso,DC=com" | Export-Clixml C:\backup\ou_users_acl_$(Get-Date -Format 'yyyyMMdd').xml
便于异常时快速比对与回滚











