我有一个用C#编写的应用程序,该应用程序可以检索(OUS,容器等(等对象的顶级级别,但是我应用的过滤器也带来了OU&包含计算机对象的容器。我只需要最顶层的对象,例如OUS,容器,组,这些对象仅包含用户对象并跳过包含计算机对象类型的OU。
我以下是过滤器查询,但没有过滤OU&包含计算机对象的容器。
(|(objectclass=domain)(objectclass=domainDNS)(objectclass=organization)(objectclass=organizationalunit)(objectclass=inetOrgPerson)(objectclass=group)(objectclass=groupOfNames)(&(objectclass=container)(!cn=computers)))
我只想得到OUS,容器&组仅具有用户对象并跳过所有具有计算机对象的OUS容器。
ldap查询仅限于查看对象本身的属性。因此,有时,如果我不确定我可以查询什么,我将使用广告用户和计算机,打开对象的属性(如在这种情况下(,然后查看属性编辑器选项卡以查看哪些属性和值我可以在那里搜索吗?
如果您为OU执行此操作,您会发现没有任何属性告诉您OU。
中的对象类型因此,您问题的简短答案是您无法搜索仅包含计算机对象的OU,容器和组。
在(|(objectClass=organizationalUnit)(objectClass=container)(objectClass=group))
然后进行单独的搜索以查看它们是否包含计算机对象。
如果您使用的是DirectorySearcher
,则可以将SearchRoot
设置为OU仅搜索一个OU。然后,您将搜索(objectClass=computer)
以在内部找到计算机对象。您可能还需要将SearchScope
设置为OneLevel
,以找到该ou。
对于组,您可以使用:
搜索该组的计算机成员的域(&(memberOf=groupDN)(objectClass=computer))
其中groupDN
是组的distinguishedName
。