Skip to main content

Connecting to Active Directory - AD - using c#

Hi all, This is one of the most important and basic things a developer has to do in his life. Here I will show how to connect to the AD and get some basic information required.

I also have covered fetching manager's information in this topic, I faced problem while working with this. When you search AD with UserID, it returns a path to the manager's information. We have to use the path and search the AD again to get manager's mailid and other information...


public string GetManagerMailID(string UserName)
{
try
{
Hashtable hsEmpData;
string sManagersMailID = "";

hsEmpData = SearchLDAP(UserName);
foreach (DictionaryEntry deSearchDataKey in hsEmpData)
{
if (deSearchDataKey.Key.ToString() == "manager")
{
sManagersMailID = getManagersID(deSearchDataKey.Value.ToString());
break;
}
}
return sManagersMailID;
}
catch (Exception ex)
{
throw ex;
}
}




private static Hashtable SearchLDAP(string userID)
{
//Pass a connecetion string of sorts to the DirectoryEntry,
//Here replace ABC with domain name...
DirectoryEntry entry = new DirectoryEntry("LDAP://DC=ABC,DC=com");
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(anr="+ userID +"))";

mySearcher.PropertiesToLoad.Add("givenname"); // will give you first name
mySearcher.PropertiesToLoad.Add("sn"); // will give you last name
mySearcher.PropertiesToLoad.Add("mail"); // for mail id
mySearcher.PropertiesToLoad.Add("manager"); // for manager's information

Hashtable associateDetailsTable = new Hashtable();
ResultPropertyValueCollection resultCollection;

//search the AD depending on userID
SearchResult searchResult = mySearcher.FindOne();

//Add the details to the hashtable...
associateDetailsTable.Add("AssociateID", userID);
if(searchResult != null)
{
resultCollection = searchResult.Properties["givenname"];
foreach(object result in resultCollection)
{
associateDetailsTable.Add("FirstName", result.ToString());
break;
}
resultCollection = searchResult.Properties["sn"];
foreach(object result in resultCollection)
{
associateDetailsTable.Add("LastName", result.ToString());
break;
}
resultCollection = searchResult.Properties["mail"];
foreach(object result in resultCollection)
{
associateDetailsTable.Add("Mail", result.ToString());
break;
}
resultCollection = searchResult.Properties["manager"];
foreach (object result in resultCollection)
{
associateDetailsTable.Add("manager", result.ToString());
break;
}
}
return associateDetailsTable;
}




private string getManagersID(string managersString)
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + managersString);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
//mySearcher.Filter = "(&(objectClass=user)(anr=" + userID + "))";

string sMailID="";

mySearcher.PropertiesToLoad.Add("givenname");
mySearcher.PropertiesToLoad.Add("sn");
mySearcher.PropertiesToLoad.Add("mail");

ResultPropertyValueCollection resultCollection;
SearchResult searchResult = mySearcher.FindOne();

if (searchResult != null)
{
resultCollection = searchResult.Properties["mail"];
foreach (object result in resultCollection)
{
sMailID = result.ToString();
break;
}
}
return sMailID;

}


- Vighnesh Bendre

Hope this post helps atleast one person.
For any doubts contact me at vikram.bendre@gmail.com

Comments

Popular posts from this blog

Error while activating feature - SharePoint 2010

Hi all, While I was working on SharePoint 2010 recently I came across some issues. I am putting them across so that anyone facing the same issue may find solution easily. Error: Error occurred in deployment step 'Activate Features': Feature with Id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' is not installed in this farm, and cannot be added to this scope. Solutions: I was getting this error while ‘deploy’ing a feature from Visual Studio 2010. I searched the entire project for this GUID which is mentioned in the error. I did not find it anywhere. While troubleshooting, I opened the physical folder and opened ‘Feature1.feature’ file in notepad. This xml file was using the before mentioned GUID. I was not able to find it in VS 2010 :( I copied the GUID mentioned in the ‘Feature1.feature’ file and pasted it in the Feature ID section in ‘Feature1.Template.xml’ file. This solved the problem. Why I thought to mention it is because the exception thrown is confusing. It does not tell you...

Working with large xml files in c# .net

Working with large (huge) xml files is always a pain in the … The reason? These files can’t be loaded in to memory. On my desktop, where I have 2 gigs memory, I can’t open the file in even notepad. I was presented with a challenge recently to manipulate one such large xml file. The xml file was of 550+ MB. I know many would say I have seen bigger xml files than this. But the heart of the matter is if I can’t open 550+ MB file in notepad or in xmldocument in c#, then I can’t open any file bigger than this. And hence the logic to play with these files would remain same. The scenario: We have an xml file from which we want to remove a single node without removing its children. In the below sample xml fragment, the node has to be removed. The children nodes, must then be attached to ( node’s parent) node. One Two 100.22 GoodDay 3 4 Five 200.09 Cra...

Custom People Picker (Editor) in SharePoint 2010

[Modified:11 Oct 2010] Now you can find the source code for this example in CodePlex The out-of-the-box SharePoint people picker allows users to select users, SharePoint groups, Distribution Lists & Security groups . Users may accidentally add large AD groups to SharePoint groups and send notifications to hundreds of people. The administrator may want more control over the security of the people picker control. In some scenario the administrator may want to restrict the user to only select ‘users’ or ‘SharePoint Groups’. This can be achieved by creating a custom people picker control which inherits from SharePoint people editor. In below example, we are going to explore creation of custom people picker control, replace the OOTB people editor control, provide a people picker settings page in central administration and create menu to access the settings page in Central Administration. 1. Create custom people picker For creating a custom control (which inherits from SharePoint PeopleE...