我正在与客户 Active Directory 合作,其中包含很多内容。有数百个用户的 givenName 和 sn 属性为空。我想从我的查询结果中过滤任何具有空 sn 或空 givenName 的记录,因为我的应用程序无法处理这些记录。
这符合我的要求,但我相信必须有更好的方法来做到这一点:
(&(objectClass=User)(|(!(!(sn=*))))(!(!(givenName=*)))))
有没有更清晰简洁的方法可以通过 ldap 查询来完成此任务?
我正在与客户 Active Directory 合作,其中包含很多内容。有数百个用户的 givenName 和 sn 属性为空。我想从我的查询结果中过滤任何具有空 sn 或空 givenName 的记录,因为我的应用程序无法处理这些记录。
这符合我的要求,但我相信必须有更好的方法来做到这一点:
(&(objectClass=User)(|(!(!(sn=*))))(!(!(givenName=*)))))
有没有更清晰简洁的方法可以通过 ldap 查询来完成此任务?
sn
并且givenName
具有语法的name
属性,即DirectoryString
语法为1.3.6.1.4.1.1466.115.121.1.15
。语法属性DirectoryString
不允许为空,即 aDirectoryString
必须至少有一个字符。
过滤器sn=*
是一个present
过滤器(不是子字符串或正则表达式),这意味着如果sn
属性不存在(如果存在,它必须至少有一个字符),则条目将被从可能的搜索结果中过滤掉。对givenName=*
.
一个更简单的过滤器可能是'(&)'
,其中搜索请求在其要返回的属性列表中包含以下内容:@User
,它将返回User
objectClass 中与过滤器匹配的每个条目的所有属性,然后让应用程序从每个条目中提取sn
和givenName
属性即返回。如果返回的条目数很大,请使用 Simple Paged Results Request Control 将返回的条目数限制为更易于管理的值。
或者......它可能是 Active Directory 不符合 LDAP 并且不inetOrgPerson
正确支持其中的 objectClass 和属性语法,并且确实允许属性的空值或null
属性值DirectoryString
,尽管我无法想象 Microsoft 会提供不兼容的产品符合 LDAP。
(!(!(givenName=*))) = (!givenName=*)