0

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

这符合我的要求,但我相信必须有更好的方法来做到这一点:

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

有没有更清晰简洁的方法可以通过 ldap 查询来完成此任务?

4

2 回答 2

2

sn并且givenName具有语法的name属性,即DirectoryString语法为1.3.6.1.4.1.1466.115.121.1.15。语法属性DirectoryString不允许为空,即 aDirectoryString 必须至少有一个字符。

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

一个更简单的过滤器可能是'(&)',其中搜索请求在其要返回的属性列表中包含以下内容:@User,它将返回UserobjectClass 中与过滤器匹配的每个条目的所有属性,然后让应用程序从每个条目中提取sngivenName属性即返回。如果返回的条目数很大,请使用 Simple Paged Results Request Control 将返回的条目数限制为更易于管理的值。

或者......它可能是 Active Directory 不符合 LDAP 并且不inetOrgPerson正确支持其中的 objectClass 和属性语法,并且确实允许属性的空值或null属性值DirectoryString,尽管我无法想象 Microsoft 会提供不兼容的产品符合 LDAP。

也可以看看

于 2013-02-24T13:19:08.120 回答
0

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

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

于 2015-04-30T14:57:11.647 回答