Fork me on GitHub
C#操作AD及Exchange Server总结

C#操作AD及Exchange Server总结

这篇博客的目的:根据亲身项目经历,总结对AD及Exchange Server的操作,包括新建AD用户,设置密码,为AD用户创建邮箱等。

本文完全原创,转载请说明出处,希望对大家有用。

文档目录:

  • 测试环境及需求简述
  • 对AD操作
    • 引入DLL及方法简述
    • 新增OU或Security Group
    • 新建AD User
    • 添加用户到组或从组中删除用户
    • 用户信息更新
    • Enable/Disable用户账号
  • 对Exchange Server操作
    • 为AD用户新建邮箱
    • Enable/Disable用户邮箱
  • 总结归纳

一、测试环境及需求简述

1、测试环境

服务器:windows server 2008R2

Exchange:Exchange Server 2010 sp1

开发工具:Visual Studio 2010

一台exchange服务器+一台AD服务器+一台承载测试程序的服务器

2、需求简述

  • 根据提供的信息创建对应的OU
  • 根据提供的用户信息新建AD用户
  • 根据提供的信息修改AD用户
  • 为AD用户

二、AD操作

1、引入DLL及方法简述

MS提供了远程操作AD的DLL:System.DirectoryServices(添加引用中有);

其中,我们使用LDAP协议访问AD,LDAP翻译为轻量目录访问协议。

在使用的时候,需要注意一些问题:

  • 如果在WEB应用中使用,在数据量大的时候回产生超时的问题,建议采取其他方式如MS MQ等方式处理信息,避免超时的问题。
  • 使用LDAP会有安全风险,毕竟通过网络传输用户凭证并不是很安全,最好是运行在企业内网。

DirectoryServices其实提供了其他很多操作,如对IIS的操作,对本地用户的操作,有兴趣的可以了解下。

2、新增OU或Security Group

 首先新建一个控制台应用程序

添加服务引用:

在项目中新建一个ADHelper.cs用来提供AD操作的公用方法

 ADHelper

 ADHelper代码解释:

  1. 新建一个DirectoryEntry类,也就是活动目录的入口类
  2. 指定要连接到的Path,在稍后的新建OU实例中会详细解释Path的组成
  3. 用来连接AD的管理员账号,此管理员账号必须有操作AD的权限
  4. 管理员的密码,同样是为了连接AD
  5. 重载的GetDirectoryEntry是为了根据输入的路径引用此路径的入口,稍后会用到

 新建一个ADManage.cs操作类,用来定义具体的操作方法:

 CreateOU

新建OU代码解释:

  1. ObjectExists方法判断新增的OU是否已经存在,代码下面会附上
  2. 利用ADHelper生成目录入口,本例是在一个测试的CompanyA OU中
  3. Children属性获取所有子项,并使用Add方法添加OU
  4. 提交更改,发回服务器
 CreateGroup
 ObjectExists

操作方法写好后,我们就来测试一下

在Program中写测试代码:

 测试代码

运行代码

 

域控中查看结果:

补充:

如何在多层OU下创建新的OU?

OU类似于文件夹,在不同的目录中可以有相同名字的OU,想要在多层OU下创建OU,首先要确认路径Path

假设有一个OU,path为:

CompanyA

BranchB

DepartmentC

则GetDirectoryEntry实例中的path属性应该修改为:

“LDAP://AD服务器地址/OU=DepartmentC,OU=BranchB,OU=CompanyA,DC=contoso,DC=com”,这样新建的OU就会在DepartmentC目录下。

3、新建AD User

新建User与新建OU或组有一些不同,先看代码:

 CreateUser

新建用户代码解释:

  1. 利用ObjectExists判断用户是否存在,如果存在则提示用户已存在
  2. 新建入口类实例,Add方法新增用户
  3. SetProperty设置新用户的属性(显示名、Pre-Windows 2000登录名、登录名),并提交更改
  4. SetPassword设置用户初始密码,提交更改,关闭连接

编写测试代码:

 测试代码

测试结果:

注意:此时新建的账户是停用状态,后面的章节会介绍如何启用/停用

 4、添加用户到组或从组中删除用户

 在组中添加/删除用户使用到DirectorySearcher,用来查找组,见代码:

 AddUserToGroup

代码解释:

  1. 新建DirectorySearcher实例,为Filter赋值,根据传入的参数de目录查找该安全组(注意:此组需要包含在DirectoryEntry中)
  2. 根据参数userDn判断用户是否存在(userDn是用户的标识名如:“CN=Employee01,OU=CompanyA,DC=rzh,DC=com”)
  3. dirEntry.Properties["member"].Contains(userDn)判断组中是否存在该用户
  4. 如果该组不存在该用户,则添加用户到组。如果该组中存在该用户,则将该用户从组中移除

测试一下,这里只测试添加,移除操作请自行测试:

 测试代码

测试结果:

5、用户信息更新

用户信息更新也比较简单,直接上示例代码+测试代码,如果有疑问,随时联系:

 ModifyUser
 测试代码

6、Enable/Disable用户账号

 Enable/Disable用户账号用到了新的属性userAccountControl,可以对账号密码的是否过期,账号是否可用等进行设置。

以下是设置userAccountControl时会用到值

 UserAccountControl

具体代码如下:

 EnableAccount
 DisableAccount

AD一节的内容已经写完了,下一篇博客会写对Exchange Server的操作。

如果有什么疑问,请及时与我讨论

posted on 2013-07-10 09:56  HackerVirus  阅读(405)  评论(0编辑  收藏  举报