我想大家都很熟悉了,活动目录可以说是 Windows 操作系统中一个很重要的变化。 因此,可以用自己的C# 代码操作活动目录是一件值得骄傲的事情。通过使用 .Net framework,我们可以轻易的做到这一点。 在者篇文章中,我将简单的介绍如何用C#编程来操作活动目录。
Sommaire
介绍
1.活动目录的概念
1.1活动目录的概念
1.2?活动目录中的协议
2. 绑定
2.1 System.DirectoryServices 命名空间
2.2 绑定
2.3 例子
3. 活动目录的属性
3.1 列举活动目录的属性
3.2 属性集合
3.3 建立新对象
4. 在活动目录中搜索
4.1 DirectorySearcher 类
4.2 根节点
4.3 过滤器
4.4 属性
4.5 查找范围
4.6 排序
4.7 返回值
结语
1.活动目录的概念
我想大家都知道活动目录了。但是,为了让读者明白,我还是在说一下在.NET framework中活动目录的概念。
1.1活动目录的概念
活动目录中的数据以树形结构的形式储存。 也就是说,活动目录可以被看成是一颗树。为了节省时间,这里 将不对活动目录中的Object, multimaster replication, forest, sites 的概念进行重复。
1.2 活动目录中的协议
我们要说说活动目录中几个重要的协议。
1.2.1 LADP
轻型目录访问协议,经常被用来访问活动目录。如果你是一位C 语言开发者,你应该对使用LADP API 访问活动目录感到熟悉。但是,我们在C# l中使用-- ADSI (Active Directory Service Interface)来替代。
1.2.2 ADSI
活动目录服务接口,是 .NET framework 中的新工具。它定义了COM 接口来提供不同协议的服务。它在分布式系统中为不同的目录访问提供服务。要是用 ADSI ,就要引入System.DirectoryServices 命名空间。
下面式关于ADSI 服务的COM 接口的简图。COM 并不再本文中占有过多比例,即使式新手也能看懂。
本文中,我们主要使用LDAP 协议。你可以在MSDN中找到更详细的信息。
2. 绑定
2.1 System.DirectoryServices 命名空间
我们使用 ADSI 来管理域控制器,在域中添加用户,管理打印机,这些都可以通过我们的程序来控制。 由于System.DirectoryServices命名空间,.NET 开发者多了一个有力的工具。 我们要讨论这个命名空间的类和函数: DirectoryEntry 这是 System.DirectoryServices 命名空间中最有用的一个类。它的实例代表活动目录中的对象。. DirectoryEntries 代表 DirectroryEntry 类的集合,包含活动目录的子目录。 DirectorySearcher 主要用于属性的搜索。
2.2 绑定
绑定用来连接活动目录:
开始的 “LDAP” 说明我们使用LADP协议连接活动目录。除了LADP,还有:GC, IIS, WinNT, NIDS and NWCOMPAR. 第二部分制定域控制器。如果不制定这部分, Windows Server 2003 会自动搜索域控制器。 第三部分是端口号。LDAP 的默认端口号是 389. The last part is the distinguished name. 你可以看到 “OU=***, DC=***, DC=**” 是基于X.500的LDAP语法。
2.3 例子
这是一个关于绑定的例子:
如果这是你第一次接触活动目录编程,你不能直接使用System.DirectoryServices 命名空间。 你必须添加这个命名空间到工程文件中。右键点击工程名,选择 “Add Reference…” ,再选择.NET ,选中System.DirectoryServices 再点OK.
3. 活动目录的属性
在绑定一个工作目录之后,我们应该拿那一个物件的不同属性。 也就是说,如果我们想要修改某事或把使用者加入那一个网域,我们起先应该知道那一个物件的结构。 在这章中,我们将会见到该如何列出特性,使用者附带说明, 而且在缀合的工作之后更新工作目录的信息。
3.1 列举活动目录的属性
有许多方法拿工作目录的物件特性,我们将会一点之前讨论他们:
一些属性在 DirectoryEntry 类别中会提供关于物件的有用资讯给我们, 举例来说, 像名字, Guid , SchemaClassName 和等等如果工作绑与特定的使用者帐户一起做,它能够直接地列出这些属性。
资讯科技也被推荐拿使用 DirectoryEntry.Properties 的属性。 但是在这一个条件中,你应该知道你想要拿的属性名字。 下列各项是一个简单的例子表现该如何在 C#语言中达成这.
3.2 属性集合
明显地, 有工作目录的许多不同类型的物件。 为了要取回这些属性, DirectoryEntry 类别的特性属性将会返回 PropertyCollection 。 因为一个属性可以包含许多数值,即将来临的一个好例图是使用者物件的 属性, 一个使用者总是可以拥有许多电话号码。 在下列的例子中, 特性 [名字]将会返回一个物件的行列。 这些属性的数值可能是字串,十位和另外地。 无论如何,我们将会使用 ToString() 方法显示他们。
3.3 建立新对象
与 DirectoryEntry 类别的成员在一起,我们也可以产生工作目录的一个新的物件。
首先,我们绑 hebut.supinfo.com 服务器的一个组织的单位。 如果我们苍白的增加我们的新物件,我们应该第一绑一个组织的单位。 情形是相同的在工作目录管理中; 我们产生正确的 OU 的一个新的使用者。
此外,我们用被 DirectoryEntry.Children 退还的属性产生 DirectoryEntries 。 我们可以增加,划除, 而且更新我们以 DirectoryEntries 的帮忙需要的信息。 在这一个例子中,我显示方法增加. 这一个方法需要二个函数中的独立变数, 这第一一是符合简易资料存取协定的语法物件的名字; 秒一是工作目录的数据结构的型态。
而且,我们增加使用者我们刚刚创造的属性。 那增加 () 特性的方法将会增加特定的物件属性。 然而,如果属性在使用者物件中不退出,COMException 将会被丢。
最后,我们应该使用方法 DirectoryEntry.CommitChanges() 确定我们制造的变化。 这一个方法以 Java 语言语言相当像转储清除 () 方法, 清除存储器的区域,而且写数据进工作目录之内。
4. 在活动目录中搜索
工作目录是一种已经被为拜访最佳化的数据库。 因此,在工作目录中搜寻是相当方便。 在 C语言中# 语言和那 .框架,微软公司给我们一个有力的工具完成这一个任务-DirectorySearcher 类别。 那一个类别只可能与简易资料存取协定协定一起应用; 它不能被在 NDS 或 IIS 之下例示。
4.1 DirectorySearcher 类
首先,我认为通常检视 DirectorySearcher 类别是非常重要的。 你将会找微软的开发商网路的比较精确的信息。
我们继续使用例子上方, 意谓,我将不做那绑工作, 它相同于我们被在章中介绍那绑。
4.2 根节点
DirectorySearcher 类别的这一个 SearchRoot 属性叙述我们的搜寻工作的开始位置。 这一个属性的内定数值是你绑的工作目录的根路径。
4.3 过滤器
滤波器几乎是相同于我们见到的在其他部份那 .框架,定义我们想要取回的属性型态。 我们可以使用我们的展示语句的联系值机员, 如此的当做 <=,=,>= 和等等那 & 和 | 是也可得的在这一个滤波器展示语句中。 在上述的例子中,它非常明显我们想要搜寻所有的 " 学生 " 的使用者。 如果我改变展示语句进入 "(objectClass=*)之内", 它不会是令人惊讶的在那一个工作目录中的所有物件在我们的搜寻中被选择。
4.4 属性
默认的属性值是“Path” 和 “Name”.
4.5 查找范围
一下是查找范围的枚举值:
Base Limits the search to the base object. The result contains at most one object.
OneLevel Searches one level of the immediate children, excluding the base object.
Subtree Searches the whole subtree, including all children and the base object itself.
4.6 排序
对活动目录中的内容排序:
searcher.Sort = new SortOption("Name",SortDirection.Ascending);
4.7 返回值
现在,我们开始在活动目录进行查找。FindOne() 查找单个对象, FindAll() 返回所有对象。如果你想得到所有的对象,就要使用FindAll() 返回一个 SearchResultCollection。
本文转自tiasys博客园博客,原文链接:http://www.cnblogs.com/tiasys/archive/2009/11/23/1608902.html,如需转载请自行联系原作者