无法筛选出包含计算机对象的OU

时间:2019-05-09 09:31:24

标签: c# filter active-directory

我有一个用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容器。

1 个答案:

答案 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