`
wyf
  • 浏览: 438837 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

AD 活动目录相关操作(C#)

阅读更多
public static class DomainInformation

    { 

                

        #region Constants  

        //static string[] usersLdapPath = @"http://www.cnblogs.com/yxbsmx/admin/ldap://zzzzzz.com/OU=xxxxxx,DC=yyyyyy,DC=com";

        static string usersLdapPath = System.Configuration.ConfigurationManager.AppSettings["LDAPConnectionString"].ToString() ;

        const string adLoginName = "zzzzzz.com\\administrator";  //管理员用户

         //或者上面写成  const string adLoginName =@ "zzzzzz.com\administrator";

         //或者const string adLoginName = "administrator@zzzzzz.com";    

        const string adLoginPassword = "88888888";

        #endregion

        

        static public string[] GetGroupsForUser(string domainADsPath, string username)// 获取用户所属组

        {

            DirectoryEntry usersDE = Directoryunits(domainADsPath);

            DirectorySearcher ds = new DirectorySearcher(usersDE);

            ds.Filter = "(&(sAMAccountName=" + username + "))";

            ds.PropertiesToLoad.Add("memberof");

            SearchResult r = ds.FindOne();

            if (r.Properties["memberof"].Count == 0)

            {

                return (null);

            }

            string[] results = new string[r.Properties["memberof"].Count];

            for (int i = 0; i < r.Properties["memberof"].Count; i++)

            {

                string theGroupPath = r.Properties["memberof"][i].ToString();

                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);

            }

            usersDE.Close();

            return (results);

        }

        /// <summary>

        /// </summary>

        /// <param name="username"></param>

        /// <returns></returns>

        public static string[] GetGroupsForUser(string username)

        {

            DirectoryEntry usersDE = DomainInformation.Directory();

            DirectorySearcher ds = new DirectorySearcher(usersDE);

            ds.Filter = "(&(sAMAccountName=" + username + "))";

            ds.PropertiesToLoad.Add("memberof");

            SearchResult r = ds.FindOne();

            if (r.Properties["memberof"] == null)

            {

                return (null);

            }

            string[] results = new string[r.Properties["memberof"].Count+1];

            for (int i = 0; i < r.Properties["memberof"].Count; i++)

            {

                string theGroupPath = r.Properties["memberof"][i].ToString();

                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);

            }

            results[r.Properties["memberof"].Count]="All";//All组属于任何人,在AD之外定义了一个组,以便分配用户权限

            usersDE.Close();

            return (results);

        }

        static public string[] GetUsersForGroup(string domainADsPath, string Groupname)// 获取用户

        {

            DirectoryEntry usersDE = Directoryunits(domainADsPath);

            DirectorySearcher ds = new DirectorySearcher(usersDE);

            ds.Filter = "(&(objectClass=group)(cn=" + Groupname + "))";

            ds.PropertiesToLoad.Add("member");

            SearchResult r = ds.FindOne();

            if (r.Properties["member"] == null)

            {

                return (null);

            }

            string[] results = new string[r.Properties["member"].Count];

            for (int i = 0; i < r.Properties["member"].Count; i++)

            {

                string theGroupPath = r.Properties["member"][i].ToString();

                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);

            }

            usersDE.Close();

            return (results);

        }

        static public string GetUserDisplayName(string username)// 获取组用户

        {

            string results;

            DirectoryEntry usersDE = Directory();

            

            DirectorySearcher ds = new DirectorySearcher(usersDE);

            ds.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";

            ds.PropertiesToLoad.Add(UserProperty.DisplayName);

            SearchResult r = ds.FindOne();

            results = r.GetDirectoryEntry().InvokeGet(UserProperty.DisplayName).ToString();

            usersDE.Close();

            return (results);

           

        }

        static public UserInfoEx GetUserInfoEx(string username)      //获取域用户详细信息

        {

            DirectoryEntry usersDE =Directory();

            DirectorySearcher ds = new DirectorySearcher(usersDE);

            ds.Filter = "(&(objectClass=user)(objectCatogery=person)(sAMAccountName=" + username + "))";

            ds.PropertiesToLoad.Add("cn");

            ds.PropertiesToLoad.Add(UserProperty.Name);

            ds.PropertiesToLoad.Add(UserProperty.UserName);

            ds.PropertiesToLoad.Add(UserProperty.homePhone);

            ds.PropertiesToLoad.Add(UserProperty.FirstName);

            ds.PropertiesToLoad.Add(UserProperty.LastName);

            ds.PropertiesToLoad.Add(UserProperty.Email);

            ds.PropertiesToLoad.Add(UserProperty.Title);

            ds.PropertiesToLoad.Add(UserProperty.Company);

            ds.PropertiesToLoad.Add(UserProperty.Address);

            ds.PropertiesToLoad.Add(UserProperty.City);

            ds.PropertiesToLoad.Add(UserProperty.State);

            ds.PropertiesToLoad.Add(UserProperty.PostalCode);

            ds.PropertiesToLoad.Add(UserProperty.Phone);

            ds.PropertiesToLoad.Add(UserProperty.Country);

            SearchResult r = ds.FindOne();

            UserInfoEx result = new UserInfoEx();

          

            result.Name = r.GetDirectoryEntry().InvokeGet(UserProperty.Name).ToString();

            result.LoginName = r.GetDirectoryEntry().InvokeGet(UserProperty.UserName).ToString(); 

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.FirstName) != null)

            {

                result.FirstName = r.GetDirectoryEntry().InvokeGet(UserProperty.FirstName).ToString();

            }

            else

            {

                result.FirstName = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.homePhone) != null)

            {

                result.homePhone = r.GetDirectoryEntry().InvokeGet(UserProperty.homePhone).ToString();

            }

            else

            {

                result.homePhone = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.LastName)!= null)

            {

                result.LastName = r.GetDirectoryEntry().InvokeGet(UserProperty.LastName).ToString();

            }

            else

            {

                result.LastName = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Email) != null)

            {

                result.EmailAddress = r.GetDirectoryEntry().InvokeGet(UserProperty.Email).ToString();

            }

            else

            {

                result.EmailAddress = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Title) != null)

            {

                result.Title = r.GetDirectoryEntry().InvokeGet(UserProperty.Title).ToString();

            }

            else

            {

                result.Title = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Company) != null)

            {

                result.Company =r.GetDirectoryEntry().InvokeGet(UserProperty.Company).ToString();

            }

            else

            {

                result.Company = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Address) != null)

            {

                result.Address =r.GetDirectoryEntry().InvokeGet(UserProperty.Address).ToString();

            }

            else

            {

                result.Address = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.City) != null)

            {

                result.City =r.GetDirectoryEntry().InvokeGet(UserProperty.City).ToString();

            }

            else

            {

                result.City = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.State) != null)

            {

                result.State =r.GetDirectoryEntry().InvokeGet(UserProperty.State).ToString();

            }

            else

            {

                result.State = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.PostalCode) != null)

            {

                result.PostalCode =r.GetDirectoryEntry().InvokeGet(UserProperty.PostalCode).ToString();

            }

            else

            {

                result.PostalCode = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Phone) != null)

            {

                result.Phone = r.GetDirectoryEntry().InvokeGet(UserProperty.Phone).ToString();

            }

            else

            {

                result.Phone = "";

            }

            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Country) != null)

            {

                result.Country =r.GetDirectoryEntry().InvokeGet(UserProperty.Country).ToString();

            }

            else

            {

                result.Country = "";

            }

            usersDE.Close();

            return (result);

        }

        static private string GetAdGroupDescription(string prefix)//根据CN获取组description

        {

            string results;

            DirectoryEntry groupsDE = Directory();

            DirectorySearcher groupsDS = new DirectorySearcher(groupsDE);

            groupsDS.Filter = "(&(objectClass=group)(CN=" + prefix + "*))";

            groupsDS.PropertiesToLoad.Add("cn");

            SearchResult sr = groupsDS.FindOne();

            results = sr.GetDirectoryEntry().InvokeGet("description").ToString();

            groupsDE.Close();

            return (results); 

        }

        static private DataTable GetAdGroupInfo()//根据CN获取组信息 

        {

            DataTable dt = new DataTable();

            dt.Columns.Add("URL", typeof(System.String));

            dt.Columns.Add("cn", typeof(System.String));

            dt.Columns.Add("Description", typeof(System.String));

            DirectoryEntry groupsDE = Directory();

            DirectorySearcher searcher = new DirectorySearcher(groupsDE);

           

            searcher.Filter = "(&(objectClass=group))";

            //searcher.SearchScope = SearchScope.Subtree;

            //searcher.Sort = new SortOption("description", System.DirectoryServices.SortDirection.Ascending);

            searcher.PropertiesToLoad.AddRange(new string[] { "cn", "description"});

            SearchResultCollection results = searcher.FindAll();

            if (results.Count == 0)

            {

                return (null);

            }

            else {

                foreach (SearchResult result in results)

                {

                    DataRow dr = dt.NewRow();

                    dr[0] = result.Path.ToString();

                    dr[1] = result.GetDirectoryEntry().InvokeGet("cn").ToString();

                    if (result.GetDirectoryEntry().InvokeGet("Description")!=null)

                    dr[2] =  result.GetDirectoryEntry().InvokeGet("Description").ToString();

                    else

                    dr[2] = result.GetDirectoryEntry().InvokeGet("cn").ToString();

                    dt.Rows.Add(dr);

                }

                dt.DefaultView.Sort = "description ASC";

                groupsDE.Close();

                return dt;

            

            }

        }

        static public string getAccountName(string cn) //根据CN获取登陆名

        {

            foreach (string path in usersLdapPath)

            {

                DirectoryEntry userContainerDE = Directoryunits(path);

                DirectorySearcher ds = new DirectorySearcher(userContainerDE);

                ds.Filter = "(&(objectClass=user)(cn=*" + cn + "*))";

                ds.PropertiesToLoad.Add("sAMAccountName");

                SearchResult r = ds.FindOne();

                if (r!=null)

                return r.GetDirectoryEntry().InvokeGet("sAMAccountName").ToString();

            }

            return null;

        }

        static public bool isAdUser(string username)//判断是否域用户

        {

            DirectoryEntry userContainerDE = Directory();

            DirectorySearcher ds = new DirectorySearcher(userContainerDE);

            ds.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";

            ds.PropertiesToLoad.Add("cn");

            SearchResult r = ds.FindOne();

            if (r == null)

            {

                userContainerDE.Close();

                return false;

                

            }

            else

            {

                userContainerDE.Close();

                return true;

            }

           

        }

        static public DataTable adUserlist( string groupname)   //生成用户数据表

        { 

             DataTable dt = new DataTable();

             dt.Columns.Add("cn", typeof(System.String));

             dt.Columns.Add("sAMAccountName", typeof(System.String));

             string[] groupmember = GetUsersForGroup(usersLdapPath[0], groupname);

             if (groupmember.Length == 0)

             {

                 return null;

             }

             else

             {

                 foreach (string member in groupmember) { 

                 if(IsAccountActive(getAccountControl(getAccountName(member))))

                 {

                  DataRow dr = dt.NewRow();

                  dr[0] = member.ToString();

                  dr[1] = getAccountName(member);

                  dt.Rows.Add(dr);

                 }

                 }

                 return dt;

             

             }

            

        

        }

        static public void adUserlistbox(ListBox results, string groupName)  //生成USER

        {

            results.Items.Clear();

            DataTable dt = adUserlist(groupName);

            if (dt != null)

            {

                results.DataSource = dt;

                results.DataTextField = dt.Columns[0].Caption;

                results.DataValueField = dt.Columns[1].Caption;

                results.DataBind();

            }

        }

        static public void adGrouplistbox(ListBox results)

        {

            results.Items.Clear();

            DataTable dt = GetAdGroupInfo();

            DataRow dr = dt.NewRow();

            dr[1] = "All";

            dr[2] = "All";

            dt.Rows.Add(dr);

            results.DataSource = dt;

            results.DataTextField = dt.Columns[2].Caption;

            results.DataValueField = dt.Columns[1].Caption;

            results.DataBind();

           

        }

        static public void aduserGrouplist(DropDownList results) {

            results.Items.Clear();

            DataTable dt = GetAdGroupInfo();

            results.DataSource = dt;

            results.DataTextField = dt.Columns[2].Caption;

            results.DataValueField = dt.Columns[1].Caption;

            results.DataBind();

        }

        static public DirectoryEntry Directory() {

             DirectoryEntry userContainerDE;

            string accountName = UserProperty.getAccountName().ToString();

            accountName = accountName.Substring(0, accountName.IndexOf("\\")).Trim();

          //判断登陆用户是否为域用户,"zzzzzz"为域名,域名用户格式:zzzzzz/username

            if (accountName.ToLower() != "zzzzzz")   

                userContainerDE = new DirectoryEntry(usersLdapPath, adLoginName, adLoginPassword); // AuthenticationTypes.Secure);}

               

            else

                 userContainerDE = new DirectoryEntry(usersLdapPath);//, adLoginName, adLoginPassword);

            return userContainerDE;

        }

        static public DirectoryEntry Directoryunits(string ldappath )

        {

            DirectoryEntry userContainerDE;

            string accountName = UserProperty.getAccountName().ToString();

            accountName = accountName.Substring(0, accountName.IndexOf("\\")).Trim();

           // userContainerDE = new DirectoryEntry(ldappath);

            if (accountName.ToLower() != "zzzzzz" ) 

                //userContainerDE.Username = adLoginName;

                //userContainerDE.Password = adLoginPassword;

                //userContainerDE.AuthenticationType = AuthenticationTypes.Secure;

                userContainerDE = new DirectoryEntry(ldappath, adLoginName, adLoginPassword);// AuthenticationTypes.Secure);}

                

            else

                userContainerDE = new DirectoryEntry(ldappath);//, adLoginName, adLoginPassword);

            return userContainerDE;

        }

        public static int getAccountControl(string accountName)//获取权限码

        {

            int results;

            DirectoryEntry userContainerDE = Directory();

            DirectorySearcher ds = new DirectorySearcher(userContainerDE);

            ds.Filter = "(&(objectClass=user)(sAMAccountName=" + accountName + "))";

            ds.PropertiesToLoad.Add("userAccountControl");

            try

            {

                SearchResult r = ds.FindOne();

                results = Convert.ToInt32(r.GetDirectoryEntry().InvokeGet("userAccountControl"));

                userContainerDE.Close();

                return results;

            }

            catch {

                userContainerDE.Close();

                return 0;

            }

        

        }

          

        public static bool IsAccountActive(int userAccountControl)//判断是否有效

        {

            int ADS_UF_ACCOUNTDISABLE = 0X0002;

            int userAccountControl_Disabled = Convert.ToInt32(ADS_UF_ACCOUNTDISABLE);

            int flagExists = userAccountControl & userAccountControl_Disabled;

            if (flagExists > 0)

                return false;

            else

                return true;

        }

        public static DirectoryEntry GetDirectoryEntryByAccount(string sAMAccountName)

        {

                DirectoryEntry de = Directory();

                DirectorySearcher deSearch = new DirectorySearcher(de);

                deSearch.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + sAMAccountName + "))";

                // deSearch.SearchScope = SearchScope.Subtree;

                try

                {

                    SearchResult result = deSearch.FindOne();

                    //if (result == null)

                    //{ return null; }

                    de = Directoryunits(result.Path);

                    return de;

                }

                catch

                {

                    //throw;

                    return null;

                }

        }

        public static DirectoryEntry GetDirectoryEntryByAccount(string sAMAccountName, string password)

        {

            DirectoryEntry de = GetDirectoryEntryByAccount(sAMAccountName);

            if (de != null)

            {

               // string commonName = de.Properties["cn"][0].ToString();

                if (GetDirectoryEntry(sAMAccountName, password) != null)

                    return GetDirectoryEntry(sAMAccountName, password);

                else

                    return null;

            }

            else

            {

                return null;

            }

        }

        public static DirectoryEntry GetDirectoryEntry(string sAMAccountName, string password)

        {

            try

            {

                DirectoryEntry userde = new DirectoryEntry(usersLdapPath, sAMAccountName, password, AuthenticationTypes.Secure);

                DirectorySearcher deSearch = new DirectorySearcher(userde);

                deSearch.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" + sAMAccountName + "))";

                //deSearch.SearchScope = SearchScope.Subtree;

                try

                {

                     SearchResult result = deSearch.FindOne();

                    userde = Directoryunits(result.Path);

                    return userde;

                }

                catch

                {

                    //throw;

                    return null;

                }

            }

            catch (Exception ex)

            {

                throw new Exception(ex.Message);

            }

        }

    }

 

分享到:
评论

相关推荐

    C#AD(活动目录)操作

    2. **引用AD操作类**: 在C#中,操作AD主要使用`System.DirectoryServices`命名空间下的类,例如`DirectoryEntry`和`DirectorySearcher`。首先需要在项目中引入这个命名空间。 3. **连接AD**: 连接到AD服务器的...

    C# AD 域验证

    在IT领域,特别是企业级应用开发中,"C# AD域验证"是一个常见的主题,它涉及到Windows活动目录(Active Directory, AD)与C#编程语言的集成。活动目录是Microsoft提供的一种目录服务,用于管理网络资源,如用户、...

    c#AD域用户操作代码

    例如,你可以用EasyUI创建一个管理界面,用户可以在界面上输入信息,然后调用上述的C#方法执行AD操作。 总结来说,C#在ASP.NET中处理AD域用户操作是一项重要的技能,涵盖了用户认证、创建和删除等功能。结合EasyUI...

    详解C#使用AD(Active Directory)验证内网用户名密码

    Active Directory(AD)是一种目录服务,由微软公司开发,用于在 Windows 操作系统中管理和存储用户、组、计算机和其他对象的信息。它提供了一个集中化的身份验证和授权机制,使得管理员可以更方便地管理网络中的...

    C#编写的活动动目录辅助操作类 ADHelper

    活动目录辅助类。封装一系列活动目录操作相关的方法。包括用户登录验证及用户帐户属性修改等相关操作的方法

    C# 、.NET 读取AD域里用户名或组

    在IT领域,活动目录(Active Directory,简称AD)是一种用于管理网络资源的分布式数据库系统,由微软开发。在Windows服务器操作系统中,AD是组织、存储和管理用户、计算机、网络服务和其他对象的主要工具。本篇文章...

    新版AD操作类C#代码

    新版AD操作处理类 【ASP.NET组资源】新版AD操作处理类 关于ASP.NET如何获取AD中的详细用户信息等方法的实现。其中主要依托CLR:DirectoryServices. ** File Name: AdHandler.cs ** Creator: ** Create date: ** ...

    C#操作AD的几个例子,研究研究会有收获。

    在IT领域,Active Directory(AD)是微软提供的一种目录服务,用于管理网络资源,而C#作为.NET框架下的主要编程语言,提供了丰富的类库来与AD进行...结合LDAP协议,可以更深入地理解和控制AD操作,从而提高工作效率。

    C#读取AD域里用户名或组

    此外,确保对AD操作进行适当的权限控制,防止未授权的访问。 总之,C#通过`System.DirectoryServices`提供了一套强大且灵活的工具,可以轻松地读取AD域中的用户名和组信息。开发者可以根据具体需求,利用这些工具...

    C#同步AD的数据的代码

    在IT领域,特别是Windows域...总的来说,C#同步AD的数据涉及到的技能点包括AD架构的理解、.NET AD操作API的使用、查询设计以及数据处理逻辑。这个过程对于构建依赖AD的系统或应用,确保数据准确性和安全性至关重要。

    AD域操作类库,可实现ou增加、删除、修改、同步功能 C#

    AD域 OU及用户增加、删除、修改通用类库文件,其他分要的很贵,我下载了分享给大家,密码123456 希望对各位有用

    c#AD域信息读取工具源码

    C#提供了一套名为System.DirectoryServices的命名空间,该命名空间包含了处理AD操作所需的类和方法,如DirectoryEntry和DirectorySearcher。 **1. 使用DirectoryEntry进行连接:** DirectoryEntry对象代表AD中的一...

    C# 读取当前账户,然后查出AD中其他的相关信息,并写到注册表里面

    本教程将详细讲解如何使用C#语言读取当前登录账户的信息,通过 LDAP 连接查询AD中的其他相关信息,并将这些信息写入到系统注册表中。 首先,让我们理解什么是AD和LDAP。Active Directory 是微软提供的一个目录服务...

    C#读取AD域里用户名或组.rar

    在IT领域,特别是Windows系统管理和开发中,Active Directory(AD)是用于组织和管理网络资源...在理解和掌握这些基本原理后,可以灵活地扩展到其他AD操作,如添加、删除、修改用户或组,以及更复杂的查询和权限管理。

    C#读取AD欲里的用户名或组实例

    在IT行业中,活动目录(Active Directory,简称AD)是微软提供的一个重要的身份验证和资源管理服务,用于组织和管理网络中的用户、计算机和其他资源。在Windows操作系统环境下,C#编程语言提供了一种强大的方式来与...

    c#对域用户的操作

    在提供的代码片段中,`ADHelper` 类封装了与活动目录相关的操作,使得对AD域用户的管理变得更加方便。下面我们将详细探讨这个类中的关键知识点。 1. **ADHelper 类结构**: `ADHelper` 是一个静态密封类,这意味着...

    c# 操作 RFID 示例1

    我们将基于提供的标题“c# 操作 RFID 示例1”以及描述中提及的Visual Studio 2010环境,来阐述RFID系统的基本原理、C#中的相关API及其实现步骤。 首先,理解RFID系统的基本构成至关重要。一个完整的RFID系统通常...

    c# 获取域 用户 组 信息

    总之,C#提供了强大的工具来处理与Active Directory相关的任务,通过理解和熟练使用`System.DirectoryServices`,开发者能够轻松地获取和操作域内的各种信息,包括用户、组和组织单元,为企业的IT管理带来便利。

Global site tag (gtag.js) - Google Analytics