Active directory 如何从Active Directory查询中筛选null或空属性

Active directory 如何从Active Directory查询中筛选null或空属性,active-directory,ldap,Active Directory,Ldap,我正在与一个客户的Active Directory合作,它有很多缺点。有数百个用户具有空的givenName和sn属性。我想从我的查询结果中筛选任何具有空序列号或空givenName的记录,因为我的应用程序无法处理这些记录 这符合我的要求,但我相信一定有更好的方法: (&(objectClass=User)(|(!(!(sn=*))))(!(!(givenName=*))))) 有没有一种更清晰简洁的方法可以通过ldap查询来实现这一点?sn和givenName拥有name属性作为它们

我正在与一个客户的Active Directory合作,它有很多缺点。有数百个用户具有空的givenName和sn属性。我想从我的查询结果中筛选任何具有空序列号或空givenName的记录,因为我的应用程序无法处理这些记录

这符合我的要求,但我相信一定有更好的方法:

(&(objectClass=User)(|(!(!(sn=*))))(!(!(givenName=*)))))

有没有一种更清晰简洁的方法可以通过ldap查询来实现这一点?

sn
givenName
拥有
name
属性作为它们的优势,该属性是
DirectoryString
语法,即语法是
1.3.6.1.4.1.1466.115.121.1.15
。语法为
DirectoryString
的属性不允许为空,即
DirectoryString
必须至少包含一个字符

筛选器
sn=*
是一个
present
筛选器(不是子字符串或正则表达式),这意味着如果
sn
属性不存在(如果存在,则必须至少有一个字符),则该条目将从可能的搜索结果中筛选出来。同样适用于
givenName=*

一个更简单的筛选器可能是
'(&)
,其中搜索请求在其要返回的属性列表中包含以下内容:
@User
,它将为与筛选器匹配的每个条目返回
User
objectClass中的所有属性,然后让应用程序从返回的每个条目中提取
sn
givenName
属性。如果返回的条目数较大,请使用简单的分页结果请求控件将返回的条目数限制为更易于管理的值

或者。。。可能是Active Directory不符合LDAP,不正确支持
inetOrgPerson
对象类和其中属性的语法,并且允许
DirectoryString
属性值为空或
null
,尽管我无法想象微软会推出一款不符合LDAP的产品

另见
    • (!(!(givenName=*))=(!givenName=*))