AD LDS环境中查询禁用用户失败的原因咨询
AD LDS中服务器端过滤禁用用户失效的原因解析
1. Enabled属性无法用于服务器端过滤的本质原因
Enabled是PowerShell ActiveDirectory模块提供的计算属性,并非AD LDS服务器端原生存储的属性。它是模块在本地通过解析相关账户控制属性计算得出的结果,因此:
- 直接在
Get-ADUser的-Filter参数中使用Enabled -eq '$false'会报错,因为服务器端无法识别这个非原生属性,且传入的字符串'$false'与属性的布尔类型不匹配(即使改成$false,服务器端依然不支持)。 - 只有将用户数据拉取到本地后,通过
Where-Object才能基于这个计算属性过滤。
2. msDS-UserAccountDisabled无法服务器端过滤的原因
msDS-UserAccountDisabled是AD的构造属性,这类属性不会被持久化存储在目录中,而是在客户端发起查询时由服务器实时计算生成。AD LDS的LDAP查询引擎不支持直接对构造属性进行服务器端过滤,因此你用-Filter "msDS-UserAccountDisabled -eq '$true'"或对应的LDAP过滤器都无法得到预期结果,必须本地拉取后再过滤。
3. userAccountControl按位匹配过滤器失效的可能原因
userAccountControl:1.2.840.113556.1.4.803:=2是匹配userAccountControl中包含ACCOUNTDISABLE(值为2)标志的标准LDAP过滤器,在AD中生效但AD LDS中失效,通常有两种可能:
- AD LDS用户对象未启用
userAccountControl属性:部分AD LDS实例的用户类可能未默认启用该属性,或者你的分区配置中未开启相关账户控制特性。 - 权限或实例配置限制:你的AD LDS服务账户可能没有读取
userAccountControl属性的权限,或者实例未启用支持按位匹配的LDAP扩展功能。
高效替代方案
如果不想全量拉取用户,可通过指定必要属性减少传输数据量:
- 基于
msDS-UserAccountDisabled过滤:Get-ADUser -Server 'ADLDS' -SearchBase "Path" -Filter * -Properties msDS-UserAccountDisabled | Where-Object { $_.msDS-UserAccountDisabled -eq $true } - 若
userAccountControl可用,本地按位判断:Get-ADUser -Server 'ADLDS' -SearchBase "Path" -Filter * -Properties userAccountControl | Where-Object { ($_.userAccountControl -band 2) -eq 2 }
内容的提问来源于stack exchange,提问作者Jessie
相关产品推荐
相关产品推荐

