在.Net环境下用C#操纵活动目录

** 在. ** ** Net ** ** 环境下用 ** ** C# ** ** 操纵活动目录 ** ** **

王雷

Windows 2000 Server 在 Windows NT Server 4.0 的基础上,进一步发展了 " 活动目录( Active Directory ) " 。活动目录是从一个数据存储开始的。它采用了类似 Exchange Server 的数据存储,称为: Extensible Storage Service ( ESS )。其特点是不需要事先定义数据库的参数,可以做到动态地增长,性能非常优良。这个数据存储之上已建立索引的,可以方便快速地搜索和定位。活动目录的分区是 " 域( Domain ) " ,一个域可以存储上百万的对象。域之间还有层次关系,可以建立域树和域森林,无限地扩展。

活动目录充分体现了微软产品的 "ICE" ,即集成性( Integration ),深入性 (Comprehensive) ,和易用性 (Ease of Use) 等优点。活动目录是一个完全可扩展,可伸缩的目录服务,既能满足商业 ISP 的需要,又能满足企业内部网和外联网的需要。

在. Net 环境下操纵活动目录非常容易,其中提供了很多封装好的类用来操纵活动目录,这些类都存放在 System.DirectoryServices s 名称空间里。本文见简要介绍一下如何使用这些类来读取活动目录中的信息。

注:我们假设您已经对活动目录的概念有了基本的了解。

我的网络环境由两个域控制器,和数台 win2000 工作站组成,安装了活动目录用来保存域里的一切信息,域名是 szcs 。

下面我们开始建立一个简单的控制台应用程序,来读取活动目录的信息。

** 第一步:建立项目 **

(这就不多说了)

** 第二步:添加引用 **

由于操纵活动目录的类都存放在 System.DirectoryServices.dll文件里。所以,我们必须在项目中添加对它的引用。

方法:在菜单中,选择 项目引用 ,选择 ** System.DirectoryServices.dll ** , **确定。 **

** 第三步:引用名称空间 **

方法:在程序的开头出添加下面程序

** using ** ** System.DirectoryServices; **

** 第四步:编写程序 **

下面是一个范例程序

namespace ADsample

{

///

1<summary>
2
3///  Summary description for Class1. 
4
5///  </summary>

class Class1

{

static void Main( string [] args)

{

//

// TODO: Add code to start application here

//

GetAllOU();

Console.ReadLine();

}

//获取目录中需要的组织单元(OU)

public static void GetAllOU()

{

DirectoryEntry entry = new DirectoryEntry("LDAP://szcs");

DirectorySearcher mySearcher = new DirectorySearcher(entry);

mySearcher.Filter = ("(objectClass=organizationalUnit)");

foreach (SearchResult resEnt in mySearcher.FindAll())

{

Console.Write(resEnt.GetDirectoryEntry().Name.ToString());

Console.WriteLine("\t"resEnt.GetDirectoryEntry().Name.ToString());

} //end foreach

} //end GetAllOU

} //end class

} //end namespace

** 程序注解 : **

ü 程序开始,实例化了一个 DirectoryEntry类,其构造函数的参数是"LDAP://szcs",这里szcs是域名。

ü 然后又实例化了一个 DirectorySearcher类,用来查询szcs域中活动目录中的信息,其构造函数的参数是一个DirectoryEntry类的实例对象。

ü DirectorySearcher类的Filter属性用来设置查询的过滤条件,一般有以下三种:

1. objectClass=organizationalUnit 查询条件是所有的组织单元(OU)

2. objectClass=group 查询条件是所有的组(GROUP)

3. objectClass=user 查询条件是所有的用户(USER)

当然还可以设置其他的过滤条件,而且可以使用逻辑运算符,详情请参加 MSDN

ü DirectorySearcher类的Findall方法用来递归的查找所有符合条件的对象。其返回结果

是一个 SearchResult类型的对象,这是一个集合类型。

ü 用 Foreach语句访问集合中的所有对象,获得对象的信息。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus