2011-03-09 5 views
6

System.DirectoryServices.AccountManagement 네임 스페이스의 일부인 GroupPrincipal을 사용하여 string 형식의 목록을 채우려고하므로 사용자가 Active Directory 그룹의 구성원인지 확인할 수 있습니다. 지금까지 작성한 편집 된 수업은 다음과 같습니다.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); 
     } 
    } 

그래서 내가 잘못 가고 있습니까? (! BTW, NULL 검사)는 SearchGroup에 그룹 주체를 받고있어 그리고 당신은 잡는거야 - 사전 :

+2

를? ?? –

+1

Matt이 질문은 실제 질문이 아닙니다.이 코드는 어떻게 작동합니까? 어떤 결과를 얻습니까? 중단 점을 확인하면 디버그 시간에 어떻게 동작합니까? 당신이 지금 얻고있는 것과는 다른 무엇을하고 싶습니까? –

+1

죄송합니다. 사용자 목록이 없습니다. GroupName 값은 null입니다. 나는 사용자 목록을 볼 것으로 예상한다 (나는 그 그룹의 회원 인 사용자가 있음을 안다) - 그 말이 맞습니까? – Matt

답변

0

에서

덕분에 나는 당신이 당신의 방법에 간단한 오타가 있다고 생각 회원들은 GroupName ??

이 시도 :

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

Im 실행 시간/컴파일 오류가 발생하지 않습니다. foreach 루프를 실행하기 전에 반복적으로 반복 할 사용자 목록을 제공하는 P의 값을 채워야합니까? – Matt

+2

완전히 무시하십시오. 내 테스트가 내 머리에서 놀았습니다. 나는 단언했습니다 .isnull not assert.isnotnull - 이제 다 괜찮아! – Matt

3

코드의이 수정 (내가 보장하기 위해 시험 제작) 작동 : 당신이 ** ** 무엇을 볼 것으로 예상합니까 당신이 볼 일을

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); 
       } 
      } 
     } 
    } 
관련 문제