Solved

How to Return all user attributes given their samaccountname

Posted on 2009-07-01
13
2,535 Views
Last Modified: 2013-12-24
I'm trying to return the First Name and Last Name of a user by only providing the samaccountname to the search filter.
protected void Page_Load(object sender, EventArgs e)
    {
        GetActiveADUsers("LDAP://adBox.company.com", "CN=samaccountname=domain\\user");
    }
 
    public void GetActiveADUsers(string ldapString, string adSearchFilter)
    {
        DirectoryEntry de = new DirectoryEntry(ldapString,"domain\\username","password");
        DirectorySearcher deSearch = new DirectorySearcher();
        deSearch.SearchRoot = de;
 
        deSearch.SearchScope = SearchScope.Subtree; //Including the sub OU's
        deSearch.Filter = adSearchFilter;
        SearchResultCollection result = deSearch.FindAll();
 
        //Get User Array Here
        for (int x = 0; x < result.Count; x++)
        {
            string firstLastName = Convert.ToBoolean(result[x].Properties["name"].Count > 0) ? result[x].Properties["name"][0].ToString() : "";
            
            System.Web.HttpContext.Current.Response.Write(firstLastName + "<br />");
 
        }
    }

Open in new window

0
Comment
Question by:kvigor
  • 7
  • 6
13 Comments
 
LVL 70

Expert Comment

by:Chris Dent
ID: 24757007

Hey :)

I would do this...

Chris
protected void Page_Load(object sender, EventArgs e)
    {
        // Modified the ldapFilter so it searches for sAMAccountName
        GetActiveADUsers("LDAP://adBox.company.com", "(samaccountname=user)");
    }
 
    public void GetActiveADUsers(string ldapString, string adSearchFilter)
    {
        DirectoryEntry de = new DirectoryEntry(ldapString,"domain\\username","password");
        DirectorySearcher deSearch = new DirectorySearcher(de, adSearchFilter);
        // Passed in the constructor
        // deSearch.SearchRoot = de;
 
        // SubTree is the default, so really not required here. 
        deSearch.SearchScope = SearchScope.Subtree; //Including the sub OU's
        // Passed in the constructor
        // deSearch.Filter = adSearchFilter;
        // The sAMAccountName is a unique attribute in the search scope (single domain)
        // FindOne() saves us a loop or two
        SearchResult result = deSearch.FindOne();
 
        string firstName = result.Properties["givenname"][0].ToString();
        string lastName = result.Properties["sn"][0].ToString();
        string fullName = result.Properties["name"][0].ToString();
        string displayName = result.Properties["displayname"][0].ToString();        
    
        System.Web.HttpContext.Current.Response.Write(firstLastName + "<br />");
    }

Open in new window

0
 

Author Comment

by:kvigor
ID: 24759396
I'll try this solution in the morning.
0
 

Author Comment

by:kvigor
ID: 24764453
I get the following error with your code:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:
Line 41:         //string lastName = result.Properties["sn"][0].ToString();
Line 42:         //string fullName = result.Properties["name"][0].ToString();
Line 43:         string displayName = result.Properties["displayname"][0].ToString();
Line 44:
Line 45:         System.Web.HttpContext.Current.Response.Write(displayName + "<br />");
 I'm using the exact code you posted???
0
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 
LVL 70

Expert Comment

by:Chris Dent
ID: 24764480

Suggests that displayName is blank (in AD). Does name return correctly?

Chris
0
 

Author Comment

by:kvigor
ID: 24764529
All properties returned blank: sn, name, and displayName.  I commented them out one by one thinking the same thing but I know I have a name and displayname as I tested my account.
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 24764535

Okay, I must have done something wrong then. One sec.

Chris
0
 

Author Comment

by:kvigor
ID: 24764606
I inserted the domain\username here:
(samaccountname=domain\\username)
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 24764619

That won't work.

sAMAccountName in the directory is just the username, domain doesn't get a look in there.

Chris
0
 
LVL 70

Accepted Solution

by:
Chris Dent earned 400 total points
ID: 24764773

I get no problems provided the search filter is correct. You could always test to see if the result is null? But that doesn't help much if it's supposed to return something :)

Anyway, take out the domain from the search filter, it can't be included there.

Chris
0
 

Author Comment

by:kvigor
ID: 24764827
So what am I not getting, I'm using this to get the samaccountname:
   username = User.Identity.Name.ToString();
and I'm passing in username var to here:
   GetActiveADUsers("LDAP://adBox.company.com", "HERE");  is there way this will work
 I'm actually going to get the fullname/display name from a different namespace because the directoryservices namespace may not be as user friendly as I need it to be.
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 24764863

As long as the "Name" value above is only the user name, and not "domain\username" then it's fine. Although with the code above it's expecting you to pass a valid LDAP filter (perhaps like "(samAccountName=" + username + ")").

That'll break a bit if you use the same user name in the authentication string for the directory entry and expect it to have the domain name there. If that is the case I would say pass user and domain as separate values, or build the filter in the function, parsing the username out of "domain\user".

Chris
0
 

Author Comment

by:kvigor
ID: 24764897
ohhhh! So Sorry that DID work I didn't understand what you meant by:
ID: 24764619 "domain doesn't get a look in there."
So I removed the "domain\" and all returned well. Thanks you saved me alot of time.

Your Solution like Ambien it Worked like a Dream : ^)
0
 

Author Closing Comment

by:kvigor
ID: 31598874
User was perfect in solution.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This article outlines the process to identify and resolve account lockout in an Active Directory environment.
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles to another domain controller. Log onto the new domain controller with a user account t…
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question