我有一个用c#编写的应用程序,它检索诸如OU,容器等对象的顶层。但是,我应用的过滤器还带来了OU和包含计算机对象的容器。 我只希望仅包含用户对象的OU,容器,组等顶级对象,而跳过包含计算机对象类型的OU。
我在过滤器查询下面,但是它没有过滤掉包含计算机对象的OU和容器。
(|(objectclass=domain)(objectclass=domainDNS)(objectclass=organization)(objectclass=organizationalunit)(objectclass=inetOrgPerson)(objectclass=group)(objectclass=groupOfNames)(&(objectclass=container)(!cn=computers)))
我只想获取仅具有用户对象的OU,容器和组,而跳过具有计算机对象的所有OU容器。
答案 0 :(得分:0)
LDAP查询仅限于查看对象本身的属性。因此,有时候,如果不确定我可以查询什么,我将使用AD用户和计算机,打开对象的属性(在这种情况下为OU),然后查看“属性编辑器”选项卡以查看哪些属性和值我在那里可以搜索。
如果对某个OU执行此操作,则会看到没有任何属性可以告诉您OU中的对象类型。
因此,对这个问题的简短回答是,您不能搜索仅包含计算机对象的OU,容器和组。
您必须首先使用以下查询找到所有 OU,容器和组:
(|(objectClass=organizationalUnit)(objectClass=container)(objectClass=group))
,然后进行单独搜索以查看它们是否包含计算机对象。
如果您使用的是DirectorySearcher
,则可以将SearchRoot
设置为一个OU,以便仅搜索一个OU。然后,您将搜索(objectClass=computer)
以在其中查找计算机对象。您可能还希望将SearchScope
设置为OneLevel
,以仅查找作为该OU的直接后代的对象。
对于组,您可以使用以下方法在域中搜索该组的计算机成员:
(&(memberOf=groupDN)(objectClass=computer))
其中groupDN
是该组的distinguishedName
。