2012-11-05 2 views
4

다음 코드로 회사 LDAP 목록을 쿼리합니다. 문제는 전체 문자열을 씁니다. 문자열 파싱과 별도로 그룹 이름을 작성하는 쉬운 방법이 있습니까?Active Directory 그룹 열거 형

using System; 
using System.Collections.Generic; 
using System.DirectoryServices; 
using System.Linq; 

public class Test 
{ 
    public static void Main() 
    { 
     string userName = "USER"; 

     DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://dc=ABC,dc=com"); 

     DirectorySearcher search = new DirectorySearcher(); 

     search.Filter = String.Format("(cn={0})", userName); 
     search.PropertiesToLoad.Add("memberOf"); 

     List<string> groupsList = new List<string>(); 

     SearchResult result = search.FindOne(); 
     if (result != null) 
     { 
      int groupCount = result.Properties["memberOf"].Count; 

      for (int counter = 0; counter < groupCount; counter++) 
      { 
       groupsList.Add((string)result.Properties["memberOf"][counter]); 
      } 
     } 

     List<string> list = new List<string>(); 
     list = groupsList.ToList(); 

     for (int i = 0; i < list.Count; i++) 
     { 
      Console.WriteLine(list[i]); 
     } 

    } 

} 

답변

2

나는 해결책이 그보다 쉽다고 생각합니다.

사용자의 그룹을 찾으려고합니다. 맞습니까?

private void button1_Click(object sender, EventArgs e) 
{ 
    List<string> userGroups = new List<string>(); 
    PrincipalContext LdapContext = new PrincipalContext(ContextType.Domain, domainName); 
    UserPrincipal user = UserPrincipal.FindByIdentity(LdapContext, userName); 

    foreach (var group in user.GetGroups()) 
    { 
     userGroups.Add(group.Name); 
    } 
} 
+0

PrincipalCOntext는 내가 갖고 있지 않은 AccountManagement 네임 스페이스에 대한 액세스가 필요합니다. –

+0

.Net 버전을 사용하고 있습니까? AccountManagement는 .Net 3.5입니다. 실수하지 않았다면. –

+0

v4.0.30319를 사용 중입니다. –

관련 문제