TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
John Doyle
NA
1
1.3k
Querying Active Directory
May 31 2013 4:12 AM
I have a piece of code that I am using to retrieve a first name from Active Directory based on a logon id (called a COMITID) that is also in Active Directory.
I am using a filter
The code is as follow:
1. WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent();
2. //code above gets the Windows logon ID of the current user
3. string _userID = System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\').Last();
4. //all the code below is to strip out everything so I am left with just the domain (string domain)
5. string s = currentIdentity.Name;
6. int stop = s.IndexOf("\\");
7. string domain = (stop > -1) ? s.Substring(0, stop) : string.Empty;
8. //code below setting the DirectoryEntry and DirectorySearcher variables
9. DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain);
10. DirectorySearcher dSearch = new DirectorySearcher(entry);
11. //code below is the filter
12. dSearch.Filter = "(objectClass=user)" ;
13. //code below sets the properties I want to retrieve to the givenName (Fisrt name), sn (the surname) and samAccountName (the logon id)
14. var propertiesToLoad = new[]
15. {
16. "givenName",
17. "sn",
18. "samAccountName>"
19. };
20. //adding the properties
21. dSearch.PropertiesToLoad.AddRange(propertiesToLoad);
22. //looping through Active Directory
23. foreach (SearchResult searchEntry in dSearch.FindAll())
24. {
25. //getting the entry I want
26. var userEntry = searchEntry.GetDirectoryEntry();
27. //in reality "XBBLDZQ" will not be hardcoded in; this example is just for testing
28. if (userEntry.Properties["samAccountName"].Value.ToString().Trim().Contains("XBBLDZQ"))
29. {
30. //shows the first name in a messagebox
31. MessageBox.Show(userEntry.Properties["givenName"].Value.ToString());
32. }
33. }
This does not give me back the first name (line 31). However when I change the filter (line 12) from what is there now:
dSearch.Filter = "(objectClass=user)";
to
dSearch.Filter = "(&(objectClass=user)(samAccountName=XBBLDZQ))";
then it works.
This is obviously not the way I want it to work as I don't want to filter by a single COMITID (XBBLDZQ), I want to loop through them all and pick out the one with the COMITID I want (XBBLDZQ). This is what line 28 should do.
This makes no sense to me as if I change line 12 in the way I described above, it is setting the filter to say "only give me the users with the COMITID XBBLDZQ". If I remove the filter it should give me all COMITID's (so line 31 should still execute).
Am I right or maybe I don't understand the way filters work. If I remove the filter completely then it doesn't work either. The only way it works is if I add the COMITID as a filter like below;
dSearch.Filter = "(&(objectClass=user)(samAccountName=XBBLDZQ))";
But that kind of defeats the purpose of what I want to do in the first place.
Reply
Answers (
0
)
how to generate sequece number?
To maintain the value at each level