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,如需转载请自行联系原作者

相关文章
|
6天前
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
28 1
|
6天前
|
监控 安全 C#
开发公司电脑监控软件的报警系统:一个C#示例
在当今数字化时代,企业对其计算机网络和系统的安全性和稳定性越来越重视。为了确保员工遵守公司政策、保护机密信息以及监控系统的正常运行,开发一种可靠的公司电脑监控软件变得至关重要。本文将介绍如何使用C#编写一个简单而有效的报警系统,以便监控关键数据并在必要时发出警报。
12 0
|
6天前
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
14 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
6天前
|
存储 开发框架 前端开发
C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码
医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标,将医学检验、科室管理和财务统计等检验科室/实验室所有工作进行整合,全面改善检验科室/实验室的工作现状。
21 0
|
6天前
|
Java C# 开发工具
开发语言漫谈-C#
C#的#,字面上的意思就是++++
|
6天前
|
图形学
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
|
6天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
24 0
|
6天前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
29 1
|
6天前
|
存储 C#
C#入门开发(Hello World,运算符)
C#入门开发(Hello World,运算符)
31 0
|
6天前
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
44 0