Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Quick way to retrieve user information Active Directory

How to query user information from Active Directory? I have code that works, but it's really slow. I'm using C#. This is the code I currently use:

    static void Main(string[] args)     {         SearchResultCollection sResults = null;          try         {             //modify this line to include your domain name             string path = "LDAP://EXTECH";             //init a directory entry             DirectoryEntry dEntry = new DirectoryEntry(path);              //init a directory searcher             DirectorySearcher dSearcher = new DirectorySearcher(dEntry);              //This line applies a filter to the search specifying a username to search for             //modify this line to specify a user name. if you want to search for all             //users who start with k - set SearchString to "k"             dSearcher.Filter = "(&(objectClass=user))";              //perform search on active directory             sResults = dSearcher.FindAll();              //loop through results of search             foreach (SearchResult searchResult in sResults)             {                 if (searchResult.Properties["CN"][0].ToString() == "Adit")                 {                     ////loop through the ad properties                     //foreach (string propertyKey in                     //searchResult.Properties["st"])                     //{                          //pull the collection of objects with this key name                         ResultPropertyValueCollection valueCollection =                         searchResult.Properties["manager"];                          foreach (Object propertyValue in valueCollection)                         {                              //loop through the values that have a specific name                             //an example of a property that would have multiple                             //collections for the same name would be memberof                             //Console.WriteLine("Property Name: " + valueCollection..ToString());                             Console.WriteLine("Property Value: " + (string)propertyValue.ToString());                              //["sAMAccountName"][0].ToString();                         }                     //}                     Console.WriteLine(" ");                 }             }         }         catch (InvalidOperationException iOe)         {             //         }         catch (NotSupportedException nSe)         {             //         }         finally         {              // dispose of objects used             if (sResults != null)                 sResults.Dispose();          }         Console.ReadLine();     } 

What would faster code look like to get user information from AD?

like image 281
Adyt Avatar asked Jan 19 '09 04:01

Adyt


1 Answers

You can call UserPrincipal.FindByIdentity inside System.DirectoryServices.AccountManagement:

using System.DirectoryServices.AccountManagement;  using (var pc = new PrincipalContext(ContextType.Domain, "MyDomainName")) {     var user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, "MyDomainName\\" + userName); } 
like image 189
om471987 Avatar answered Sep 29 '22 05:09

om471987