查询范围

查询的范围由绑定到的对象确定。 如果不确定对象在企业中的位置,则需要尽可能广泛的搜索。 但是,如果知道对象将包含在特定域(如用户所连接的域)或特定组(如 Manager 组)中,则应设置搜索范围以反映这种情况。 为获得最佳性能,应尽量将范围锁定为搜索尽可能少的对象。

如果不确定对象在企业中的位置,可以绑定到全局目录服务。 全局目录服务包含目录中每个对象的列表,以及每个对象的属性的一小部分。 在全局目录中找到对象后,可以从全局目录中检索其可分辨名称,并用它绑定到对象以执行其他操作。

在决定绑定到哪个对象后,可以进一步将查询限制在以下范围之一:基本查询、一级查询或子树搜索,如下图所示。

objects at the root of a search for a base, one-level, or subtree search

Base

基本查询将搜索范围限制在基本对象上。 返回对象的最大数量始终为一个。 此搜索可用于验证对象是否存在。 例如,如果你有对象的可分辨名称,并且必须根据路径验证该对象是否存在,则可以使用一级搜索。 如果搜索失败,可以假定对象可能已被重命名或移到了不同的位置,或者你获得的有关对象的数据不正确。 请注意,如果要重新访问对象,则应存储 GUID 而不是可分辨名称。 这样,对象就可以在目录层次结构中重命名或移动,而不会中断持久链接。

一级

一级搜索仅限于基本对象的直接子对象,但不包括基本对象本身。 此设置可以针对父对象的即时子对象执行有针对性的搜索。 例如,如果有一个名为 P1 的父对象,并且其直接子对象是 C1、C2 和 C3,那么在一级搜索中,C1、C2 和 C3 在评估条件时应包括在内,但 P1 不在搜索范围内。 一级搜索可用于枚举对象的所有子对象。 事实上,在某些 ADSI 提供程序中,IADsContainer 枚举会转换为一级搜索。

子树

子树搜索也称为深度搜索,包括基本对象下面的所有对象,但不包括基本对象本身。 此搜索可能会生成指向其他服务器的引荐。 此搜索的范围最大,可能会返回大量结果集。 如果可能,请至少在一个索引属性上进行搜索,并设置引用设置(有关详细信息,请参阅性能和处理大型结果集),以符合搜索要求。 此外,还建议以异步和分页方式执行子树搜索结果,以减少服务器开销和网络效率。 子树搜索通常用于搜索给定范围内的对象。 例如,搜索所有帐户将在 30 天或更短时间内过期的用户。