2016-08-24 37 views
0

我有一個檢索用戶節點出AD的過程:迭代組,將它們保存在列表

public static void ConnectActiveDirectory() 
{ 
    List<string> lstGroups = new List<string>(); 
    DirectoryEntry entry; 
    string user = "username"; 
    string server = ConfigurationManager.AppSettings["ActiveDirectory.Server"]; 

    entry = new DirectoryEntry(@"LDAP://" + server); 
    DirectorySearcher searcher = new DirectorySearcher(entry); 
    searcher.Filter = "sAMAccountName=" + user; 
    searcher.PropertiesToLoad.Add("MemberOf"); 
    SearchResult result = searcher.FindOne(); 
} 

的想法是所有組保存在字符串列表中沒有做什麼像:

foreach (ResultPropertyValueCollection s in result.Properties.Values) 
{ 
    string groupname = null; 

    for (int i = 0; i < s.Count; i++) 
    { 
     dn = s[i].ToString(); 
     equalsIndex = dn.IndexOf("=", 1); 
     commaIndex = dn.IndexOf(",", 1); 

     groupname = dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1); 

     lstGroups.Add(groupname); 
    } 
} 

有什麼方法,我可以在'DirectorySearcher'類使用?

此外,有沒有什麼辦法可以刪除第一個哈希表?來自SearchResult對象的廣告路徑。

回答

0

而是自己分析的專有名稱,你可以使用DirectoryEntry對象要求爲AD的顯示名稱。例如:

var directoryEntry = new DirectoryEntry(@"LDAP://address"); 
var directorySearcher = new DirectorySearcher(directoryEntry); 
directorySearcher.Filter = "samaccountname=user"; 
directorySearcher.PropertiesToLoad.Add("memberOf"); 
var result = directorySearcher.FindOne(); 
foreach (var i in result.Properties["memberOf"]) 
{ 
    var group = new DirectoryEntry(@"LDAP://" + i); 
    Console.WriteLine(group.Properties["DisplayName"]); 
} 
+1

是的,先生,您是對的,謝謝您的意見。將詳細瞭解DirectoryEntry類。 +1並標記爲答案。 – user3442470

相關問題