转自:http://blog.csdn.net/lingpaoershiyishiji/article/details/9139527
目录 |
- 新建层次关系如下:
我们要用C#访问Active Directory非常容易,主要用到
System.DirectoryServices命名空间下的两个组件类
示例在Framework 3.5下用Winform程序编写
主要结合常见需求读取组织单位(OU)及用户(User)信息,以及同步组织单位和用户的层次关系;
比较着重的还是用户的信息,特别是帐号、邮箱、SID等信息;
- 下面我们开始连接域,并读取出示例准备中键好的组织单位和用户
首先编写代码用LDAP尝试对域进行访问
形式:LDAP://Domain
#region## 是否连接到域 /// <summary> /// 功能:是否连接到域 /// 作者:Wilson /// 时间:2012-12-15 /// http://msdn.microsoft.com/zh-cn/library/system.directoryservices.directoryentry.path(v=vs.90).aspx /// </summary> /// <param name="domainName">域名或IP</param> /// <param name="userName">用户名</param> /// <param name="userPwd">密码</param> /// <param name="entry">域</param> /// <returns></returns> private bool IsConnected(string domainName,string userName,string userPwd,out DirectoryEntry domain) { domain = new DirectoryEntry(); try { domain.Path = string.Format("LDAP://{0}",domainName); domain.Username = userName; domain.Password = userPwd; domain.AuthenticationType = AuthenticationTypes.Secure; domain.RefreshCache(); return true; } catch(Exception ex) { LogRecord.WriteLog("[IsConnected方法]错误信息:" + ex.Message); return false; } } #endregion传用参数,调IsConnected方法,结果如下
- 连接上AD域后,接着我们找到根OU
#region## 域中是否存在组织单位 /// <summary> /// 功能:域中是否存在组织单位 /// 作者:Wilson /// 时间:2012-12-15 /// </summary> /// <param name="entry"></param> /// <param name="ou"></param> /// <returns></returns> private bool IsExistOU(DirectoryEntry entry,out DirectoryEntry ou) { ou = new DirectoryEntry(); try { ou = entry.Children.Find("OU=" + txtRootOU.Text.Trim()); return (ou != null); } catch(Exception ex) { LogRecord.WriteLog("[IsExistOU方法]错误信息:" + ex.Message); return false; } } #endregion
- 下面来开始读取组织单位及用户的信息。
示例为了看出层次关系及导出信息是类型区分,给OU和User新建了一个实体类和一个类型的枚举
#region## 类型 /// <summary> /// 类型 /// </summary> public enum TypeEnum : int { /// <summary> /// 组织单位 /// </summary> OU = 1,/// <summary> /// 用户 /// </summary> USER = 2 } #endregion #region## Ad域信息实体 /// <summary> /// Ad域信息实体 /// </summary> public class AdModel { public AdModel(string id,string name,int typeId,string parentId) { Id = id; Name = name; TypeId = typeId; ParentId = parentId; } public string Id { get; set; } public string Name { get; set; } public int TypeId { get; set; } public string ParentId { get; set; } } #endregion