Pobieranie grup dystrybucyjnych i ich użytkowników z AD

Klasy i metody, które nas interesują w tym temacie znajdują się w przestrzeni nazw.

using System.DirectoryServices.AccountManagement;

Pobranie grup dystrybucyjnych z AD.

            using (var ctx = new PrincipalContext(ContextType.Domain, DOMAIN NAME, CONTAINER, LOGIN, PASSWORD))
            {
                GroupPrincipal groupPrincipal = new GroupPrincipal(ctx);

                PrincipalSearcher principalSearcher = new PrincipalSearcher(groupPrincipal);
                
                foreach (var gp in principalSearcher.FindAll())
                {                    
                    GroupPrincipal group = gp as GroupPrincipal;

                    // pobranie tylko grup dystrybucyjnych - uniwersalnych (nie grupy zabezpieczeń)
                    if (group != null && (group.IsSecurityGroup.HasValue && !group.IsSecurityGroup.Value))
                    {
                        Console.WriteLine("Group {0} - {1}", group.Sid, group.Name);
                    }
                }
            }

Pobranie użytkowników należących do podanej grupy dystrybucyjnej.

            using (var ctx = new PrincipalContext(ContextType.Domain, DOMAIN NAME, CONTAINER, LOGIN, PASSWORD))
            {
                var g = GroupPrincipal.FindByIdentity(ctx, IdentityType.Sid, GROUPSID);
                Console.WriteLine("Group {0} - {1}", g.Sid, g.Name);
                foreach (var a in g.GetMembers(true))
                {
                    Console.WriteLine("Member {0} - {1}", a.Sid, a.Name);

                }
            }

Metoda GetMembers z parametrem true wyszukuje użytkowników w bieżącej grupie, ale dodatkowo działa rekurencyjnie zwracając wszystkich członków z zagnieżdżonych grup.

Advertisements