我正在与客户的Active Directory合作,其中包含很多内容。有数百个具有空givenName和sn属性的用户。我想从我的查询结果中筛选出任何空sn或空givenName的记录,因为我的应用程序无法处理这些记录。
这符合我的要求,但我相信必须有更好的方法:
(&(objectClass=User)(|(!(!(sn=*))))(!(!(givenName=*)))))
使用ldap查询是否有更清晰简洁的方法来实现这一目标?
答案 0 :(得分:1)
sn
和givenName
的{{1}}属性优于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
objectClass和属性语法,而 允许空或{{1} null
属性的属性值,但我无法想象微软会提供不符合LDAP标准的产品。
答案 1 :(得分:0)
(!(!(givenName = *)))=(!givenName = *)