Solved

C# Get Active Directory Members from a Distribution Group

Posted on 2009-04-07
3
1,764 Views
Last Modified: 2012-05-06
Hi,

I am trying to retrieve all the members from Active Directory using C# AD services.

I am able to retrieve all the members from the top level group. In our organisation they have defined some of Group Names start with * symbol. I am not able to locate the AD Group directly using the distinguishedName property.

This problem I am facing only if such group is added into some other group. for ex.

Group1 //(Main Group) I am able to locate the group
     Member1 //(Members) I am able to retrieve the members
     Member2
     Member3
    Group11 //(Sub Group) I am able to locate the group.
    *Group12 //(Sub Group with * symbol) I am unable to locate the group.

I need some help on this.
DirectoryEntry gc;

DirectoryEntry searchRoot = null;

DirectorySearcher searcher;

SearchResultCollection result;
 

// Get the directoryentry of the Global Catalog root

gc = new DirectoryEntry("GC:");
 

foreach (DirectoryEntry child in gc.Children)

{

          searchRoot = child;

}
 

searcher = new DirectorySearcher(searchRoot, string.Format("(&(|(objectCategory=person)(objectCategory=group))(sAMAccountName={0}))", searchName), new string[] { "distinguishedName", "mail", "sAMAccountName" }, SearchScope.Subtree);

                

SearchResult searchResult = searcher.FindOne();
 

if (searchResult != null)

{

        DirectoryEntry entry = new DirectoryEntry(searchResult.Path);
 

         if (IsGroup(GetValue(entry, "objectCategory")))

         {

                 IterateGroup(entry, searchRoot);

         }

         else

         {

               textBox2.AppendText(GetValue(entry, "GivenName") + " " + GetValue(entry, "SN"));

               textBox2.AppendText(Environment.NewLine);

         }

}

else

         textBox2.AppendText("User/Group not found in Active Directory");
 
 

private void IterateGroup(DirectoryEntry groupentry, DirectoryEntry searchRoot)

        {

            foreach (object member in groupentry.Properties["member"])

            {

                DirectorySearcher searcher = new DirectorySearcher(searchRoot, string.Format("(&(|(objectCategory=person)(objectCategory=group))(distinguishedName={0}))", member), new string[] { "distinguishedName", "mail", "sAMAccountName" }, SearchScope.Subtree);
 

                SearchResult searchResult = searcher.FindOne();
 

                if (searchResult != null)

                {

                    DirectoryEntry entry = searchResult.GetDirectoryEntry();
 

                    if (IsGroup(GetValue(entry, "objectCategory")))

                    {

                        IterateGroup(entry, searchRoot);

                    }

                    else

                    {

                        textBox2.AppendText(GetValue(entry, "GivenName") + " " + GetValue(entry, "SN"));

                        textBox2.AppendText(Environment.NewLine);

                    }

                }

            }

        }

Open in new window

0
Comment
Question by:GiftsonDJohn
  • 2
3 Comments
 
LVL 53

Expert Comment

by:Dhaest
ID: 24084650
This is perhaps not the answer you want, but it can be a usefull resource for you.
Howto: (Almost) Everything In Active Directory via C#
http://www.codeproject.com/KB/system/everythingInAD.aspx
0
 
LVL 14

Author Comment

by:GiftsonDJohn
ID: 24085450
Hi Dhaest,

Thanks for your reply. I know about it. I am able to retrieve all the members of the group. I am not able to get only when the name of the group starts like *GroupName. I need assistance to overcome this.
0
 
LVL 14

Accepted Solution

by:
GiftsonDJohn earned 0 total points
ID: 24838138
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

743 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now