您的位置:首页 > 编程语言 > C#

(证实可用)C#获取AD所有的用户信息,比如登录名,邮件名,属于组织,名字

2010-12-22 17:53 651 查看
感谢:http://lpcbaby.blog.163.com/blog/static/3832388720091128104016611/

假设AD中有一组织单位,给定以下信息:

AD:ms.com
AD管理员:administrator
AD管理员密码:pass@word1
组织单位名称:XX有限公司(不必理会其下有嵌套多少组织单位,通常都是部门)
现在要获取这一组织单位下的所有的用户信息,比如只要:帐号,姓名,邮件,所在组织这四个字段,具体实现如示例代码所示:
private const string domainName = "ms.com";
private const string adAdmin = "administrator";
private const string password = "pass@word1";
private const string ouName = "XX有限公司";//只是一个子节点名
private DataTable GetADUsers()
{
DataTable dt = new DataTable();
dt.Columns.Add("sAMAccountName");//帐号
dt.Columns.Add("Name");//姓名
dt.Columns.Add("mail"); //邮箱地址
dt.Columns.Add("OU"); //用户组织
DirectoryEntry adRoot = new DirectoryEntry("LDAP://" + domainName, adAdmin, password, AuthenticationTypes.Secure);
DirectoryEntry ou = adRoot.Children.Find("OU=" + ouName);
DirectorySearcher mySearcher = new DirectorySearcher(ou);//想搜索出所有,此处可省参数
mySearcher.Filter = ("(objectClass=user)"); //user表示用户,group表示组
foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
{
DataRow dr = dt.NewRow();
dr["sAMAccountName"] = string.Empty;
dr["Name"] = string.Empty;
dr["mail"] = string.Empty;
dr["OU"] = string.Empty;
DirectoryEntry user = resEnt.GetDirectoryEntry();
if (user.Properties.Contains("sAMAccountName"))
{
dr["sAMAccountName"] = user.Properties["sAMAccountName"][0].ToString();
}
if (user.Properties.Contains("Name"))
{
dr["Name"] = user.Properties["Name"][0].ToString();
}
if (user.Properties.Contains("mail"))
{
dr["mail"] = user.Properties["mail"][0].ToString();
}
if (user.Parent.Name != string.Empty && user.Parent.Name.IndexOf('=') > -1)
{
//获取用户所在的组织单位
dr["OU"] = user.Parent.Name.Split('=')[1];
}
dt.Rows.Add(dr);
}
return dt;
}
}
如果想要知道用户信息中都包含哪些字段,可以foreach出来看看
DirectoryEntry user = resEnt.GetDirectoryEntry();
foreach (string property in user.Properties.PropertyNames)
{
Console.WriteLine("字段名: " + property);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: