2012-11-05 156 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。 –