• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1097
  • Last Modified:

Extracting Users from Active directory

I need to extract user information from Active Directory...

I am not to familiar with the current Active directory structure.. So I was wondering how can I go about querying the active directory for user info...

I am able to log into the active directory using the DirectoryEntry object in C# and set the search criteria filter to "(&(objectCategory=user)(objectClass=person))" but this does not give me much info...

I have also attached my current code in the code section

Any help in this regard will be highly appreciated..

public DataTable GetData(Entities.Config.EtlConfig config)
        {
            var s = new SqlLoader();
            var dt = s.GetTableSchema(config.SqlTableToLoad);
            string setdate = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss");
            try
            {
                var de = GetDirectoryEntry();
                var ds = new DirectorySearcher(de) { Filter = "(&(objectCategory=user)(objectClass=person))" };
                var results = ds.FindAll();
                //var results = ds.FindOne();

                    foreach (SearchResult result in results)
                    {
                        if (results != null)
                        {
                            DataRow dr = dt.NewRow();

                            dr["Employee_Key"] = GetProperty(result, "title") ?? string.Empty;
                            dr["Employee_Name"] = GetProperty(result, "cn") ?? string.Empty;


                            dr["Employee_Full_Name"] = GetProperty(result, "distinguishedName") ?? string.Empty;
                            dr["Employee_Phone_Number"] = GetProperty(result, "telephoneNumber") ?? string.Empty;

                            dr["Email_Address"] = GetProperty(result, "mail") ?? string.Empty;
                            dr["Business_Unit"] = GetProperty(result, "department") ?? string.Empty;

                            dr["Supervisor_Full_Name"] = GetProperty(result, "manager") ?? string.Empty;
                            dr["Row_Update_Date"] = setdate;
                            dr["Source"] = config.Source;

                            dt.Rows.Add(dr);
                        }
                        de.Close();

                    }
                return dt;

            }
            catch (Exception e)
            {
                _log.Error(e.Message);
                throw new CustomException(e, ErrorType.DataImporter, e.Message);
            }
        }
        /// <summary>
        /// Method used to create an entry to the AD.
        /// Replace the path, username, and password.
        /// </summary>
        /// <returns>DirectoryEntry</returns>
        public static DirectoryEntry GetDirectoryEntry()
        {
            var de = new DirectoryEntry
                         {
                             //Path = "LDAP://DC=a,DC=b,DC=c,DC=Com",
                             Path = "LDAP://a.b.c.Com",
                             Username = @"a\SomeUser",
                             Password = "SomePwd"
                         };
            return de;
        }

        public static string GetProperty(SearchResult searchResult, string propertyName)
        {
            return searchResult.Properties.Contains(propertyName) ? searchResult.Properties[propertyName][0].ToString() : string.Empty;
        }

Open in new window

0
2ooth
Asked:
2ooth
  • 6
  • 2
1 Solution
 
angus_young_acdcCommented:
So what information is it you are trying to extract?  Is there anything specific?  
0
 
incercCommented:
Please try :

Filter = "(&(objectCategory=person)(objectClass=user))"

(switch values in your filter)

0
 
incercCommented:
0
Easily manage email signatures in Office 365

Managing email signatures in Office 365 can be a challenging task if you don't have the right tool. CodeTwo Email Signatures for Office 365 will help you implement a unified email signature look, no matter what email client is used by users. Test it for free!

 
incercCommented:
For a code sample of retrieving all the active directory user’s attributes, configured and not configured, please take a look in here:
http://codeleacher.wordpress.com/2008/08/07/how-to-get-all-users-active-directory-schema-properties/

There, hope it helps!
0
 
incercCommented:
Hum, back again .. I just noticed in your code that you close the DirectoryEntry object after the first result is processed :

  foreach (SearchResult result in results)
                    {
                        if (results != null) --> typo? (should check result in here)
                        {
                            ...
                        }
                        de.Close();  ---> problem! should close after foreach ended
                    }

Also,  if (results != null) should be before the foreach method, or it should read like this :
if (result != null)
0
 
2oothAuthor Commented:
HI,

Thank you for all your Comments...

I really really appreciate your help

I basically need to search for all users within Active directory..

I am currently unable to set the filter to extract only users.. even though i have set the filter to (&(objectCategory=person)(objectClass=user))

@incerc - Thanks for pointing out the bug with regards to my code.. however the situation is still hopeless

i did go thought the link about "Searching Active Directory for User Accounts " However it did not provide me with much information as to how this could be achieved.

Please Helpp!!!
0
 
incercCommented:
Hi,

What do you obtain using the filter above?

Can you run your code into debug mode and check the values? Or maybe put some debug messages in order to have more info?

Is it an exception thrown?
0
 
2oothAuthor Commented:
I finaly cracked it.....

Its all working now...

You guys are the best!!!!

Thank you all for your help
0
 
incercCommented:
Nice to hear that, what was the problem?

I'd suggest that you close then this question, and select an answer that helped you in your debugging. :)
0

Featured Post

Has Powershell sent you back into the Stone Age?

If managing Active Directory using Windows Powershell® is making you feel like you stepped back in time, you are not alone.  For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why.

  • 6
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now