How to get groups, users from Active Directory with C#

来源:互联网 发布:ubuntu添加用户 编辑:程序博客网 时间:2024/04/30 22:15

 

Don’t forget “using System.DirectoryServices;

 

1.       How to get group from AD ?

    this.Cursor = Cursors.WaitCursor;

 

    DirectoryEntry objDE = GetDirectoryObject();

    DirectorySearcher objDS = new DirectorySearcher(objDE);

    objDS.SearchRoot = objDE;

 

   // User inputs some special group name for search.

   if (String.IsNullOrEmpty( UserInputGroupNameforSearch )) {

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

   } else {

        objDS.Filter = "(&(objectClass=group)(cn=" + UserInputGroupNameforSearch + "*))";

                }

   objDS.PageSize = 1000;

   SearchResultCollection colResults = objDS.FindAll();

 

   if (colResults != null) {

        foreach (SearchResult objResult in colResults) {

// insert group name to Listbox

           this.lstGroup.Items.Add(GetProperty(objResult, "cn"));

        }

  }

 

private DirectoryEntry GetDirectoryObject() {

   DirectoryEntry objDE;

   string lstrADFullPath = "LDAP://" + YourDomainName

   string lstrUser = ValidUserName;

   string lstrPassword = ValidPassword;

   objDE = new DirectoryEntry(lstrADFullPath, lstrUser, lstrPassword, AuthenticationTypes.Secure);

   return objDE;

}

2.       How to get users list from special group?

DirectoryEntry objGroup = GetDirectoryObject();

DirectorySearcher objDS = new DirectorySearcher(objGroup);

objDS.Filter = "(&(objectClass=group)(cn=" + GroupNameInListBox + "))";

 

objDS.SearchRoot = objGroup;

SearchResult results = objDS.FindOne();

 

if (results != null) {

   System.DirectoryServices.ResultPropertyCollection pcoll = results.Properties;

 

   int n = pcoll["member"].Count;

 

   for (int i = 0; i < n; i++) {

      lsMemberString = pcoll["member"][i].ToString();

      DirectoryEntry deUser = new DirectoryEntry("LDAP://UserDomainName/" + lsMemberString, ValidUserName, ValidUserPassword, AuthenticationTypes.Secure);

      // Show all users with valid email address

if (deUser != null && deUser.Properties["mail"] != null && deUser.Properties["mail"].Value != null && ! String.IsNullOrEmpty(deUser.Properties["mail"].Value.ToString()))                     {

      YourControl.Add(deUser.Properties["cn"].Value, deUser.Properties["sAMAccountName"].Value, deUser.Properties["givenName"].Value, deUser.Properties["SN"].Value, deUser.Properties["mail"].Value, deUser.Properties["description"].Value);

        }

     deUser.Close();

            }

       }

    }

 

 objDS.Dispose();

 objGroup.Dispose();

 

3.       How to get users from AD?

 

Search users by FirstName, Lastname, Email and WindowsAccount

  String lsFirstNameStr = String.Empty;

  String lsLastNameStr = String.Empty;

  String lsEmailStr = String.Empty;

  String lsWindowsNameStr = String.Empty;

 

  if (!String.IsNullOrEmpty( UserFirstName )) {

       lsFirstNameStr = "(givenName=" + UserFirstName + "*)";

  }

  if (!String.IsNullOrEmpty(UserLastName)) {

       lsLastNameStr = "(SN=" + UserLastName + "*)";

  } else {

       lsLastNameStr = "(!(SN=*))";

  }

  if (!String.IsNullOrEmpty(UserEmail)) {

       lsEmailStr = "(mail=" + UserEmail + "*)";

  } else {

       lsEmailStr = "(mail=*)";

  }

  if (!String.IsNullOrEmpty(UserWindowsName)) {

       lsWindowsNameStr = "(sAMAccountName=" + UserWindowsName + "*)";

  }

 

 

  DirectoryEntry objDE = GetDirectoryObject();

  DirectorySearcher objDS = new DirectorySearcher(objDE);

  objDS.SearchRoot = objDE;

  objDS.Filter = "(&(objectClass=user)" + lsEmailStr + lsLastNameStr + lsFirstNameStr + lsWindowsNameStr + ")";

  objDS.PageSize = 1000;

  SearchResultCollection colResults = objDS.FindAll();

 

  if (colResults != null) {

 

      foreach (SearchResult objResult in colResults)  {

          YourControl.Add(GetProperty(objResult, "cn"), GetProperty(objResult, "sAMAccountName"), GetProperty(objResult, "givenName"), GetProperty(objResult, "SN"), GetProperty(objResult, "mail"), GetProperty(objResult, "description"));

       }

  }

 

 objDS.Dispose();

 objDE.Dispose();

 

 

 

 

private string GetProperty(SearchResult searchResult, string PropertyName)       {

   if (searchResult.Properties.Contains(PropertyName))  {

        return searchResult.Properties[PropertyName][0].ToString();

   } else {

        return string.Empty;

   }

}

原创粉丝点击