DirectorySearcher 类

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.DirectoryServicess名称空间里。本文见简要介绍一下如何使用这些C# DirectorySearcher类来读取活动目录中的信息。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

   using (DirectoryEntry entry = new DirectoryEntry())
            {
                //entry.Path ="LDAP://域";
                DirectorySearcher mySearcher = new DirectorySearcher(entry);
                mySearcher.SearchScope = SearchScope.Subtree;
                mySearcher.ServerTimeLimit = TimeSpan.FromSeconds(1200);
                //mySearcher.ClientTimeout = TimeSpan.FromSeconds(1000);
                //默认的搜索结果最大数为1000,通过设置pagesize 属性来解决
                mySearcher.PageSize = 10000;
                //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"][0].ToString();
                            }
                            if (user.Properties.Contains("mail"))
                            {
                                enemail = user.Properties["mail"][0].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语句访问集合中的所有对象,获得对象的信息。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值