2011-07-16 5 views
9

Mam działający program C# 4.0, który pobiera wszystkich członków dla określonej grupy AD. W tej grupie AD są inne grupy AD zawierające innych członków. Potrzebuję mojego programu do ustalenia, że ​​jest to grupa i odzyskania członków z tej grupy.Grupy zagnieżdżone Active Directory

Wiem, że muszę napisać program rekurencyjny, ale miałem nadzieję, że ktoś tam mógł już to zrobić. Jeśli nie, czy ktoś mógłby mi powiedzieć atrybut właściwości AD, aby zidentyfikować, że członek jest rzeczywistą grupą?

+0

Ten link może być przydatny: http://pl.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Retrieving_tokenGroups_from_ADAM –

Odpowiedz

-1

Zakładając, że używasz widoku LDAP do ActiveDirectory, szukany atrybut nazywa się "objectClass". Widoczna jest grupa z objectClass z "groupOfNames"; ewentualnie "grupa". Alternatywnie, po prostu sprawdź, czy obiekt ma jakieś "elementy", niezależnie od klasy obiektu, a jeśli tak, to przyjmij, że jest to rodzaj grupy i rekurencyjny.

13

Od kiedy używasz .NET 3.5 lub nowszej wersji, powinieneś sprawdzić przestrzeń nazw System.DirectoryServices.AccountManagement (S.DS.AM). Przeczytać o tym tutaj:

Zasadniczo, można określić kontekst domeny i łatwo znaleźć użytkowników i/lub grupy w AD. Ponadto: GroupPrincipal ma metodę o nazwie GetMembers, która wyświetli listę wszystkich członków tej grupy - opcjonalnie, zrobi to rekurencyjnie dla Ciebie!

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find the group you're interested in 
GroupPrincipal myGroup = GroupPrincipal.FindByIdentity(ctx, "SomeGroup"); 

// if you found it - get its members 
if (myGroup != null) 
{ 
    // if your call the GetMembers, you can optionally specify a "Recursive" flag - done here 
    var allMembers = myGroup.GetMembers(true); 
} 

Nowy S.DS.AM bardzo ułatwia zabawę z użytkownikami i grupami w AD!

+0

Dziękuję za wskazówkę dotyczącą S.DS.AM. To tylko uratowało mi ból pisania programu rekursywnego !!!! –

+0

'GetMembers (true)' ma ograniczenie, np. "Użytkownicy domeny" nie są w ogóle zwracani. Aby je zdobyć, musisz wywołać rekursywnie 'GetMembers (false)'. –

+0

@WernfriedDomscheit jakie są inne ograniczenia? –