private static void GetTreeDomains(AD.Domain startDomain, List <AD.Domain> treeDomainsWithChildren, List <string> unavailableDomains) { var domainTrusts = startDomain.GetAllTrustRelationships(); List <AD.Domain> treeDomains = new List <AD.Domain>(); foreach (TrustRelationshipInformation domainTrust in domainTrusts) { if (domainTrust.TrustType.Equals(TrustType.TreeRoot)) { try { var treeDomain = AD.Domain.GetDomain(new DirectoryContext(DirectoryContextType.Domain, domainTrust.TargetName)); treeDomains.Add(treeDomain); } catch { unavailableDomains.Add(domainTrust.TargetName); } } } foreach (var treeDomain in treeDomains) { AddAllChildDomains(treeDomain, treeDomainsWithChildren, unavailableDomains); } }