簡體   English   中英

迭代AD中的用戶組並將其保存在列表中

[英]Iterate groups of user in AD and save them in list

我有一個從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對象的adspath。

您可以使用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"]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM