C#中的活动目录开发

简介:

我想大家都很熟悉了,活动目录可以说是 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,如需转载请自行联系原作者

相关文章
|
8天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
42 12
|
2月前
|
前端开发 JavaScript 安全
C#一分钟浅谈:Blazor WebAssembly 开发
Blazor WebAssembly 是一个客户端框架,允许开发者使用C#和Razor语法构建Web应用。本文介绍了Blazor WebAssembly的基本概念、常见问题及解决方案,包括路由配置、数据绑定、异步操作、状态管理和性能优化等方面的内容,并分享了一些易错点及如何避免的方法。希望这些内容能帮助你在Blazor WebAssembly开发中少走弯路,提高开发效率。
118 51
|
2月前
|
开发框架 缓存 .NET
C# 一分钟浅谈:Blazor Server 端开发
Blazor Server 是基于 ASP.NET Core 的框架,允许使用 C# 和 Razor 语法构建交互式 Web 应用。本文介绍 Blazor Server 的基本概念、快速入门、常见问题及解决方案,帮助开发者快速上手。涵盖创建应用、基本组件、数据绑定、状态管理、跨组件通信、错误处理和性能优化等内容。
58 1
|
2月前
|
缓存 C# 开发者
C# 一分钟浅谈:Blazor Server 端开发
本文介绍了 Blazor Server,一种基于 .NET 的 Web 开发模型,允许使用 C# 和 Razor 语法构建交互式 Web 应用。文章从基础概念、创建应用、常见问题及解决方案、易错点及避免方法等方面详细讲解,帮助开发者快速上手并提高开发效率。
67 2
|
2月前
|
测试技术 Go C#
C#一分钟浅谈:ReSharper 插件增强开发效率
【10月更文挑战第25天】ReSharper 是 JetBrains 开发的一款 Visual Studio 插件,旨在提高 .NET 开发者的生产力。它通过代码分析、重构、导航等功能,帮助开发者避免常见错误,提升代码质量和开发效率。本文将通过具体代码案例,详细介绍 ReSharper 的常见功能及其应用。
51 1
|
2月前
|
C# Python
使用wxpython开发跨平台桌面应用,对wxpython控件实现类似C#扩展函数处理的探究
【10月更文挑战第30天】使用 `wxPython` 开发跨平台桌面应用时,可以通过创建辅助类来模拟 C# 扩展函数的功能。具体步骤包括:1. 创建辅助类 `WxWidgetHelpers`;2. 在该类中定义静态方法,如 `set_button_color`;3. 在应用中调用这些方法。这种方法提高了代码的可读性和可维护性,无需修改 `wxPython` 库即可为控件添加自定义功能。但需要注意显式调用方法和避免命名冲突。
|
3月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
45 1
|
3月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
4月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
3月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
137 0