Преобразовать список имен samaccount в отличительные имена - PullRequest
0 голосов
/ 26 марта 2020

У меня есть список имен учетных записей (тысячи), которые мне нужно добавить в качестве членов группы, поэтому мне нужно найти отличительные имена этих учетных записей, чтобы я мог добавить их в качестве членов группы.

Есть 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();
}

1 Ответ

1 голос
/ 26 марта 2020

У меня нет домена 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;
        }
    }    
}
...