我正在尝试查询Active Directory中的几乎所有用户。 我的普通用户在各种OU中,我想要检索它们。但我的系统用户存储在用户CN中,我不想检索它们。
它看起来很像another question,但他们的答案对我没有帮助。我正在使用here提供的提示,但它也没有帮助。
我使用JNDI在Active Directory中查询。我的疑问是:
(&(objectClass=user)(!(cn:dn:=Users)))
这意味着类user
的所有对象都不在Users
子树中。然而,这个查询返回的内容如下:
CN=__vmware__,CN=Users,DC=SIREDRM,DC=com
那么,为什么那个过滤器不工作?我怎么能让它运作起来?
答案 0 :(得分:7)
使用(!(distinguishedName = *,CN = Users = DC = mydomain,DC = com)),您正在尝试使用具有DN语法[Object(DS-DN)]的属性,对于这些LDAP属性,您不能在LDAP过滤器中使用通配符。
属性“distinguishedName”: http://msdn.microsoft.com/en-us/library/ms675516%28VS.85%29.aspx
LDAP语法“对象(DS-DN)” http://msdn.microsoft.com/en-us/library/ms684431%28VS.85%29.aspx
在第二个链接中,您将找到有关禁用通配符的声明。
通常,您可以使用LDAP可扩展匹配规则从子树搜索中排除某些容器,在您的情况下,语法将类似于此
(!(cn:dn:=Users))
或类似的东西。坏事:AD也不支持这种可扩展的匹配: http://msdn.microsoft.com/en-us/library/cc223241%28PROT.10%29.aspx 阅读第一段。
所以结论是:在活动目录环境中,您不能使用单个过滤器进行此操作。遗憾。
唯一的解决方案似乎是使用客户端工具。 Microsoft的脚本将向您展示如何确切地满足您的需求(除了您需要用户,而不是计算机)。
您可以看到的另一件事是用作AD代理的虚拟目录,这样您就可以在不触及AD的情况下配置过滤器和权限。
(大部分是从hyphen site复制的)