2011-03-09 14 views
6

Próbuję użyć GroupPrincipal (część obszaru nazw), aby zapełnić listę typu ciąg znaków, dzięki czemu mogę sprawdzić, czy użytkownik jest członkiem grupy Active Directory. Oto edytowana klasa, którą napisałem do tej pory:Członkostwo w grupach Active Directory GroupPrincipal

public class ActiveDirectoryMembership 
{ 
    private PrincipalContext context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName); 
    private List<string> GroupName {get;set;} 

    public ActiveDirectoryMembership() 
    { 
     //Code snipped - this part returns a list of users 
     populateGroups(); 
    } 

    private void populateGroups() 
    { 
     GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 
     GroupName = new List<string>(); 
     foreach (UserPrincipal p in GroupName.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 

Więc, gdzie się mylę?

góry dzięki :)

+2

Co widzisz, co masz oczekują ** ** zobaczyć? ?? –

+1

Matt to nie jest prawdziwe pytanie, jak działa ten kod? Jakie wyniki otrzymujesz? Jak zachowuje się w czasie debugowania, jeśli sprawdzasz z punktami przerwania? Co chcesz osiągnąć inaczej niż teraz? –

+1

Niestety, nie otrzymuję listy użytkowników; wartość GroupName ma wartość NULL. Spodziewam się zobaczyć listę użytkowników (wiem, że są użytkownicy, którzy są członkami tej grupy) - czy to ma sens? – Matt

Odpowiedz

0

Chyba masz prosty literówkę w swojej metodzie - dostajesz kapitału grupy do SearchGroup (sprawdzić NULL, btw !!), a następnie jesteś chwytając członkowie wyłączeni GroupName ??

Spróbuj tego:

private void populateGroups() 
{ 
    GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Group Name"); 

    if(SearchGroup != null) 
    { 
     GroupName = new List<string>(); 

     // call 'GetMembers' on 'SearchGroup' here!! 
     foreach (UserPrincipal p in SearchGroup.GetMembers()) 
     { 
      GroupName.add(p.SamAccountName); 
     } 
    } 
} 
+1

Nie otrzymuję błąd wykonania/kompilacji. Czy muszę zapełnić wartość P (efektywnie daje mi listę użytkowników do przejścia przez pętlę foreach? – Matt

+2

Całkowicie mnie ignoruj ​​- mój test grał z moją głową - Zrobiłem assert.isnull, a nie assert.isnotnull - wszystko jest ok teraz! – Matt

3

Ta modyfikacja kodu działa (Zrobiłem testy w celu zapewnienia):

private static readonly string DomainName = "domaincontrollercomputer.domain.com"; 
    private static readonly string DomainContainer = "DC=DOMAIN,DC=COM"; 
    private static readonly string ADGroupName = "AD Group Name"; 
    private List<string> GroupName {get;set;} 

    private void populateGroups() 
    { 
     using (var ctx = new PrincipalContext(ContextType.Domain, DomainName, DomainContainer)) 
     { 
      using (var grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, ADGroupName)) 
      { 
       GroupName = new List<string>(); 
       foreach (var member in grp.GetMembers()) 
       { 
        GroupName.Add(member.SamAccountName); 
       } 
      } 
     } 
    } 
Powiązane problemy