C#获取AD用户信息

      假设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);

      }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值