Эффективный способ поиска конкретного пользователя без учета регистра в контексте компьютера - PullRequest
0 голосов
/ 02 июля 2018

Этот код работает как шарм в контексте домена :

var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);

Это также работает в машинном контексте , но это очень медленно (поиск пользователя среди двадцати занимает 13 секунд).

Но, во-первых, этот метод не учитывает регистр, что для меня просто необходимо.

Я нашел где-то альтернативный код для машинного контекста :

var context = new PrincipalContext(ContextType.Machine);
var user = new UserPrincipal(context)
{
    SamAccountName = username
};

using (var searcher = new PrincipalSearcher(user))
{
    user = searcher.FindOne() as UserPrincipal;
}

К сожалению, этот код чувствителен к регистру.

Может ли кто-нибудь предложить подход, который является быстрым как в машинном контексте, так и без учета регистра?

1 Ответ

0 голосов
/ 03 июля 2018

Может быть не лучшим решением, если много локальных пользователей, но оно работает:

var username = "wHaTeVer";
UserPrincipal user = null;

using (var context = new PrincipalContext(ContextType.Machine))
{
    user = new UserPrincipal(context);

    using (var searcher = new PrincipalSearcher(user))
    {
        user = searcher.FindAll().FirstOrDefault(x => x.SamAccountName.Equals(username, StringComparison.InvariantCultureIgnoreCase)) as UserPrincipal;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...