【问题标题】:Convert list of samaccount names to distinguished names将 samaccount 名称列表转换为专有名称
【发布时间】:2020-07-06 16:55:13
【问题描述】:

我有一个需要添加为组成员的帐户名称列表(数千个),因此我需要查找这些帐户的专有名称,以便将它们添加为组成员。

有 21000 个用户帐户。查找专有名称需要几个小时,有更快的方法吗?

DirectoryEntry deDomain = new DirectoryEntry();
deDomain.Path = "LDAP://DC=my,DC=ca;
deDomain.Username = "me";
deDomain.Password =  "mypassword";

DirectorySearcher dsSearch = new DirectorySearcher(deDomain);
dsSearch.CacheResults = false;
dsSearch.PropertiesToLoad.Add("distinguishedname");

foreach (string sam in lstSamAccountNames)
{
    dsSearch.Filter = $"(&(objectCategory=person)(objectClass=user)(SAMAccountName={ReplaceSpecialCharacters(sSamAccountName)}))";
    SearchResult srPerson = dsSearch.FindOne();

    yield return  srPerson.Properties["distinguishedname"][0].ToString();
}

【问题讨论】:

    标签: c# ldap directoryentry


    【解决方案1】:

    目前我没有可以用来进行性能测试的 AD 域,但是您是否尝试过 AccountManagement 库而不是使用 DirectorySearcher

    using System.DirectoryServices.AccountManagement;
    
    // ...
    
    var domainName = "MyDomainName";
    
    using (var context = new PrincipalContext(ContextType.Domain, domainName))
    {
        foreach (var sam in lstSamAccountNames)
        {
            var userName = ReplaceSpecialCharacters(sam);
    
            using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, $@"{domainName}\{userName}"))
            {
                yield return user.DistinguishedName;
            }
        }    
    }
    

    【讨论】:

    • 运行大约需要 15 分钟。比我以前的方法快得多。这是可行的,因为这将是一个预定的后台作业。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多