Thursday, 31 January 2013

Search an entire Active Directory forest with C#

Automated Server Documentation

I've recently seen a few posts on how to search an entire Active Directory forest using the .NET DirectorySearcher in C#.

I was a little confused as some people were enumerating the domains and I thought it would be quicker to query the Global Catalog. The Global Catalog (GC) has limited information on all objects in the directory Forest.

I constructed the DirectorySearcher like this new DirectorySearcher("GC://");
However was surprised to find it only return results from the local domain.

It turns out you need to construct the DirectorySearcher using a DirectoryEntry rather than a string directly... strange.

Anyway the following code will find all objects with a samAccountName property in the entire forest.

String ForestGC = String.Format("GC://{0}", Forest.GetCurrentForest().Name);
DirectorySearcher Searcher = new DirectorySearcher(new DirectoryEntry(ForestGC));
Searcher.Filter = "(samAccountName=*)";
SearchResultCollection Results = Searcher.FindAll();
foreach (SearchResult Result in Results)
    textBox1.AppendText(Result.Path + Environment.NewLine);


No comments:

Post a Comment