C#获取AD用户信息

本文介绍如何通过LDAP协议从AD域中批量获取用户信息,包括账号、姓名、邮箱和所在组织单位,并展示了如何使用C#代码实现这一过程。
        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);
      }
        private DataTable GetADUsersAllProperty()
        {
            Boolean done = true;
            DataTable dt = new DataTable();
            DirectoryEntry adRoot = new DirectoryEntry("LDAP://" + domainName);           

           DirectorySearcher mySearcher = new DirectorySearcher(adRoot);
           mySearcher.Filter = ("(objectClass=user)"); //user表示用户,group表示组

            foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
            {
                DirectoryEntry user = resEnt.GetDirectoryEntry();
                if (done)
                {
                    foreach (string property in user.Properties.PropertyNames)
                    {
                        dt.Columns.Add(property);
                    }
                    done = false;
                }

                DataRow dr = dt.NewRow();
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    if (user.Properties.Contains(dt.Columns[i].ColumnName))
                    {
                        dr[i] = user.Properties[dt.Columns[i].ColumnName][0].ToString();
                    }else dr[i] = string.Empty;
                }  
                dt.Rows.Add(dr);
            }
            return dt;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值