How to search in multiple domains using System.DirectoryServices.AccountManagement?

active-directory, c#, ldap

Solution

Here is a way to find all your domains from the root one :

/* Retreiving RootDSE
 */
string ldapBase = "LDAP://DC_DNS_NAME:389/";
string sFromWhere = ldapBase + "rootDSE";
DirectoryEntry root = new DirectoryEntry(sFromWhere, "AdminLogin", "PWD");
string configurationNamingContext = root.Properties["configurationNamingContext"][0].ToString();

/* Retreiving the root of all the domains
 */
sFromWhere = ldapBase + configurationNamingContext;
DirectoryEntry deBase = new DirectoryEntry(sFromWhere, "AdminLogin", "PWD");

DirectorySearcher dsLookForDomain = new DirectorySearcher(deBase);
dsLookForDomain.Filter = "(&(objectClass=crossRef)(nETBIOSName=*))";
dsLookForDomain.SearchScope = SearchScope.Subtree;
dsLookForDomain.PropertiesToLoad.Add("nCName");
dsLookForDomain.PropertiesToLoad.Add("dnsRoot");

SearchResultCollection srcDomains = dsLookForDomain.FindAll();

foreach (SearchResult aSRDomain in srcDomains)
{
}

Then foreach domain, you can look for what you need.

Problem

I have three or more domains like `main.com`, `sub.main.com`, `sub2.main.com` and etc I have a code: ``` using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "ADServer", "dc=main,dc=com", ContextOptions.Negotiate)) { UserPrincipal u = new UserPrincipal(ctx); u.UserPrincipalName = "*" + mask + "*"; using (PrincipalSearcher ps = new PrincipalSearcher(u)) { PrincipalSearchResult<Principal> results = ps.FindAll(); List<ADUser> lst = new List<ADUser>(); foreach (var item in results.Cast<UserPrincipal>().Take(15)) { byte[] sid = new byte[item.Sid.BinaryLength]; item.Sid.GetBinaryForm(sid, 0); ADUser us = new ADUser() { Sid = sid, Account = item.SamAccountName, FullName = item.DisplayName }; lst.Add(us); } } return lst; } ``` But it searches within only one domain: `main.com`. How can I search records in all domains at one time?

Original source

Related problems