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

时间:2013-02-22 15:06:24

标签: active-directory ldap

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

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

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

使用ldap查询是否有更清晰简洁的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

sngivenName的{​​{1}}属性优于name属性,即DirectoryString语法,即语法为1.3.6.1.4.1.1466.115.121.1.15。语法DirectoryString的属性不允许为空,也就是说,DirectoryString至少需要一个字符。

过滤器sn=*present过滤器(不是子字符串或正则表达式),这意味着如果sn属性不是,则会从可能的搜索结果中过滤掉该条目现在(如果它存在,它必须至少有一个字符)。与givenName=*相同。

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

或者......可能是Active Directory不符合LDAP,并且不正确支持inetOrgPerson objectClass和属性语法,而 允许空或{{1} null属性的属性值,但我无法想象微软会提供不符合LDAP标准的产品。

另见

答案 1 :(得分:0)

(!(!(givenName = *)))=(!givenName = *)

https://technet.microsoft.com/en-us/library/ee198810.aspx