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

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

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

using (DirectoryEntry entry = new DirectoryEntry())
{
//entry.Path ="LDAP://域";
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.SearchScope = SearchScope.Subtree;
mySearcher.ServerTimeLimit = TimeSpan.FromSeconds();
//mySearcher.ClientTimeout = TimeSpan.FromSeconds(1000);
//默认的搜索结果最大数为1000,通过设置pagesize 属性来解决
mySearcher.PageSize = ;
//mySearcher.ServerTimeLimit = 500;
//mySearcher.SizeLimit = 10000;
mySearcher.Filter = "(&(objectClass=user)(|(sAMAccountName=T*)(sAMAccountName=A*)(sAMAccountName=M*)(sAMAccountName=K*)(sAMAccountName=Z*)))";
//mySearcher.Filter = "(objectClass=user)";
string enno = string.Empty;//工号
string enemail = string.Empty;//邮箱
foreach (SearchResult resEnt in mySearcher.FindAll())
{
enno = string.Empty;//工号
enemail = string.Empty;//邮箱
try
{
DirectoryEntry user = resEnt.GetDirectoryEntry();
if (user.Properties.Contains("sAMAccountName"))
{
enno = user.Properties["sAMAccountName"][].ToString();
}
if (user.Properties.Contains("mail"))
{
enemail = user.Properties["mail"][].ToString();
}
}
finally { }
}
}

程序注解:

◆程序开始,实例化了一个DirectoryEntry类,其构造函数的参数是""; ◆然后又实例化了一个C# DirectorySearcher类,用来查询DirectoryEntry域中活动目录中的信息 ◆C# DirectorySearcher类的Filter属性用来设置查询的过滤条件,一般有以下三种: 1. objectClass=organizationalUnit 查询条件是所有的组织单元(OU) 2. objectClass=group 查询条件是所有的组(GROUP) 3. objectClass=user 查询条件是所有的用户(USER) 当然还可以设置其他的过滤条件,而且可以使用逻辑运算符,详情请参加MSDN ◆C# DirectorySearcher类的Findall方法用来递归的查找所有符合条件的对象。其返回结果是一个SearchResult类型的对象,这是一个集合类型。 ◆用Foreach语句访问集合中的所有对象,获得对象的信息。

C#基础知识之DirectorySearcher 类的更多相关文章

  1. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  2. JAVA核心技术I---JAVA基础知识(时间类)

    一:时间类库了解 java.util.Date(基本废弃,Deprecated) –getTime(),返回自1970..1以来的毫秒数 java.sql.Date(和数据库对应的时间类) //与数据 ...

  3. python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能  Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...

  4. JAVA基础知识之IO-File类

    File类介绍 File是java.io包下面的一个类,代表与平台无关的文件或者目录.JAVA中,无论文件还是目录,都可以看作File类的一个对象.File类能对文件或目录新建,删除,获取属性等操作, ...

  5. javascript基础知识3#引用类

    引用类 引用类型的只是引用类型的一个实例,在ecmascript当中,引用类型是一种数据结构用于将数据和功能组织在一起,也常被称做类. object类型 构造函数[var o = new object ...

  6. C#基础知识 结构与类的区别

    网上看到struct与class之间的区别,都写的很多,当然说的是对的,也很详细.不过我个人不喜欢照本宣科,还是要有自己的理解和认识,方便记忆. (前提:对于值类型与引用类型有一定的认识) 结构最重要 ...

  7. JAVA核心技术I---JAVA基础知识(异常处理类)

    一:异常分类 Throwable:所有错误的祖先. Error:系统内部错误或者资源耗尽.不用我们管 Exception: 程序有关的异常.重点关注 –RuntimeException: 程序自身的错 ...

  8. JAVA核心技术I---JAVA基础知识(数字相关类)

    一:相关数字类 –整数 Short, Int, Long –浮点数 Float, Double –大数类 BigInteger(大整数), BigDecimal(大浮点数) –随机数类 Random ...

  9. c++基础知识_c++11 类默认函数的控制:"=default" 和 "=delete"函数

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vecto ...

随机推荐

  1. Controller控制台Vuser虚拟用户的运行状态

    Controller控制台Vuser运行的状态 Down:没有运行Pending:挂起Init:初始化Ready:准备就绪Run:正在运行Rendezvous:正在集结Passed:运行通过Faile ...

  2. 三、robotframework封装的关键字-数据库使用

    1.      从数据库查询结果:   数据库连接:Connect To Database Using Custom Params           用法:Connect To Database U ...

  3. 由ES规范学JavaScript(二):深入理解“连等赋值”问题

    var foo={rzx:1} var bar =foo; foo.x=foo={rzx:100} console.log(foo.x) console.log(bar.x)   有这样一个热门问题: ...

  4. Elasticsearch 安装head插件

    一.简介 elasticsearch-head是一个界面化的集群操作和管理工具,可以对集群进行傻瓜式操作.你可以通过插件把它集成到es(首选方式),也可以安装成一个独立webapp. Elastics ...

  5. centos7:Zookeeper集群安装

    将安装包上传到安装目录 解压文件 tar -zxvf zookeeper-3.4.12.tar.gz 移动解压后的文件到软件目录 mv zookeeper-3.4.12 /home/softwareD ...

  6. Java多线程学习——死锁的一个容易理解的例子

    发生死锁的情况:多个线程需要同时占用多个共享资源而发生需要互相死循环等待的情况 public class Mirror { //镜子 } public class Lipstick { //口红 } ...

  7. Redis-集群操作

    一.查看集群状态 1.查看集群状态 /opt/redis/src/redis-cli -h 本机IP -p redsi实例端口 -c #连接redis实例 /opt/redis/src/redis-c ...

  8. phpstudy添加PHP

    想在phpstudy2018里面增加一个php版本,操作如下: 一.下载php-7.2.19-ts文件,解压缩,放在相应的目录下: 二.修改Apache的配置文件1.修改httpd.conf 配置,D ...

  9. P1969积木大赛

    这是2018与2013提高组的真题,可怕,,原题出了两年,是个纯模拟. 读完题后就想写一个朴素的模拟,先遍历层数,再把达到层数的宽度#存起来,再判断是否连续,如果不连续ans++,然后每一次循环都要初 ...

  10. Luogu P2168 [NOI2015]荷马史诗

    题目 哈夫曼树的每个叶子结点都有一个权值(表示某数据的出现频率),且\(\sum dis_ival_i\)最小. 哈夫曼树中,权值和越大的集合离根节点越近. 而每个数据对应从根节点到该叶子结点的一种编 ...