Active Directory 编程(windows service)【原创】

LDAP 协议:LDAP的英文全称是Lightweight Directory Access Protocol,即轻量级目录访问协议.

 为了能对LDAP协议进行更好的理解,我们需要对以下概念有初步的认识:

目录:Directory,存放对象的信息,这些信息以某种顺序组织,详细描述每个对象.
目录信息树:DIT,Directory Information Tree,目录条目的集合构成了目录信息树.
条目:Entry,目录信息树中的一个结点,是对象信息的集合,是目录信息中最基本的单位,包含该对象的一系列属性.
属性:Attribute,属性描述对象的特征.一个属性由属性类型(type)和一个或多个属性值(values)构成.
相对标识名:RDN,Relative Distinguished Name,条目的名字.

唯一标识名:DN,Distinguished Name,在一个目录信息树中唯一标识一个条目的名字.

Active Directory :Active Directory是指Windows 2000网络中的目录服务。

 .Net Framework 2.0中涉及 AD编程的两个主要的类。

  1. System.DirectoryServices.DirectoryEntry 
  2. System.DirectoryServices.DirectorySearcher

编程关键步骤:

  •  连接AD
ContractedBlock.gif ExpandedBlockStart.gif Code
1using (DirectoryEntry de = new DirectoryEntry())
2ExpandedBlockStart.gifContractedBlock.gif            {
3                de.Path = "LDAP://training.local/DC=training,DC=local";
4                de.Username = "admin@TRAINING";
5                de.Password = "123123";
6            }
  • 访问AD中的节点
ContractedBlock.gif ExpandedBlockStart.gif Visit the AD Node
DirectorySearcher NewSearch = new DirectorySearcher(de);
            NewSearch.Filter 
= "(objectClass=user)";
            NewSearch.SearchScope 
= SearchScope.Subtree;

            NewSearch.PropertiesToLoad.Add(
"name");
            NewSearch.PropertiesToLoad.Add(
"description");
            NewSearch.PropertiesToLoad.Add(
"distinguishedName");
            NewSearch.PropertiesToLoad.Add(
"extensionAttribute15");

            NewSearch.Sort 
= new SortOption("description", SortDirection.Ascending);

            SearchResultCollection results 
= NewSearch.FindAll();

            
foreach (SearchResult sr in results)
            {
                DirectoryEntry myde 
= sr.GetDirectoryEntry();
                
string Emp_number = myde.Properties["description"].Value.ToString();
.
.
.
}
  • 给AD节点属性赋值
ContractedBlock.gif ExpandedBlockStart.gif Write value
1 if (!de.Properties.Contains("telephoneNumber"))
2ExpandedBlockStart.gifContractedBlock.gif                    {
3                        de.Properties["telephoneNumber"].Add(dr["p_busphone"].ToString().Trim());
4                    }

5                    else
6ExpandedBlockStart.gifContractedBlock.gif                    {
7                        de.Properties["telephoneNumber"].Value = dr["p_busphone"].ToString().Trim();
8                    }
  •  定时启动windows service
ContractedBlock.gif ExpandedBlockStart.gif Code
1if(System.DateTime.Now.ToString().EndsWith("00:00:00"))
2
3ExpandedBlockStart.gifContractedBlock.gif{
4
5    //Add your code here
6
7}
 

 工具:adsiedit.msc  查看AD中的节点的属性。

也可以通过以下的代码获取属性节点。(但只能获取存在赋值的属性列表)直接访问未赋值的属性会抛出异常。

ContractedBlock.gif ExpandedBlockStart.gif Code
 1PropertyCollection properties = de.Properties;
 2
 3foreach (string name in properties.PropertyNames)
 4
 5ExpandedBlockStart.gifContractedBlock.gif{
 6
 7  foreach (object o in properties[name])
 8
 9ExpandedSubBlockStart.gifContractedSubBlock.gif  {
10
11Console.WriteLine(name + "" + o.ToString());
12
13  }

14
15}

 

 日志管理:

EventLog

ContractedBlock.gif ExpandedBlockStart.gif Code
1if (!System.Diagnostics.EventLog.SourceExists("ADLogSourse"))
2ExpandedBlockStart.gifContractedBlock.gif            {
3                System.Diagnostics.EventLog.CreateEventSource("ADLogSourse""ADLog");
4            }

5            MyEventLog.Source = "ADLogSourse";
6            MyEventLog.Log = "ADLog";

 可以通过windows自带的日志查看工具查看。

 

转载于:https://www.cnblogs.com/wuhucome888/archive/2009/02/17/1392212.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值