You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell查询AD已删除对象容器的ACL权限?

解决AD“已删除对象”容器ACL权限验证的PowerShell方案

方法1:通过ADSI直接获取安全描述符

由于Get-ACL默认无法识别标记为isDeleted的对象,可通过ADSI绑定并启用访问已删除对象的选项,直接提取ACL:

# 获取已删除对象容器的可分辨名称
$deletedObjectsDN = (Get-ADDomain).DeletedObjectsContainer

# 配置ADSI搜索器以访问已删除对象
$searcher = [adsisearcher]"(&(objectClass=container)(distinguishedName=$deletedObjectsDN))"
$searcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$deletedObjectsDN")
$searcher.SearchRoot.Options.Add([System.DirectoryServices.DirectoryEntryOptions]::ServerHasDeletedObjects)
$searcher.PropertiesToLoad.Add("nTSecurityDescriptor") | Out-Null
$result = $searcher.FindOne()

# 提取并格式化ACL信息
$acl = $result.Properties["nTSecurityDescriptor"][0]
$acl.Access | Select-Object IdentityReference, AccessControlType, ActiveDirectoryRights, InheritanceType

此方法无需依赖PSExec,返回标准的.NET ACL对象,便于后续编程验证或修改。

方法2:通过Get-ADObject直接获取安全描述符

利用Get-ADObject的-IncludeDeletedObjects参数,显式请求nTSecurityDescriptor属性,一步获取ACL:

# 获取已删除对象容器及其安全描述符
$deletedObj = Get-ADObject -SearchBase ((Get-ADDomain).DeletedObjectsContainer) -Filter * -IncludeDeletedObjects -SearchScope Base -Properties nTSecurityDescriptor

# 提取并输出简洁的权限信息
$acl = $deletedObj.nTSecurityDescriptor
$acl.Access | Select-Object IdentityReference, AccessControlType, ActiveDirectoryRights, InheritanceType

这是更简洁的实现方式,核心是指定-Properties nTSecurityDescriptor来获取默认不返回的安全描述符属性。

关键原因说明

Get-ACL直接使用DN失败,是因为其依赖的AD路径解析逻辑默认忽略标记isDeleted属性的对象,必须通过显式配置(如ADSI选项或Get-ADObject的-IncludeDeletedObjects参数)告知客户端要包含已删除对象。

内容的提问来源于stack exchange,提问作者Skyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:41:02