Найти, если Active Directory включен / отключен с электронной почтой

Я пытаюсь выяснить, есть ли у пользователя учетная запись Active Directory, выполнив поиск по его адресу электронной почты и проверив свойство Enabled (если я верну Enabled как код true - запустить, если я верну false - запустить другой код, и если результаты null - вернуть false, потому что это письмо больше не существует). Когда я попадаю в цикл foreach, он находит в результате пользователя, основываясь на его электронной почте, но при проверке с помощью if и elses возвращает пользователя как NULL.

    public static bool DoesUserExist(string email, string domain)
    {
        var found = false;

        using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain))
        {
            UserPrincipal user = new UserPrincipal(domainContext);
            user.EmailAddress = email;

            PrincipalSearcher search = new PrincipalSearcher(user);
            search.QueryFilter = user;

            PrincipalSearchResult<Principal> results = search.FindAll();

            foreach (Principal result in results)
            {
                if (user.Enabled == true)
                {
                    found = false;
                    Helpers.LogMessage("Active Directory Account is Enabled in " + domain + " domain");
                }
                else if (user.Enabled == false)
                {
                    found = true;
                    Helpers.LogMessage("Active Directory User Account is Disabled in " + domain + " domain");   
                }
                else if (user.Enabled == null)
                {
                    found = true;
                    Helpers.LogMessage("No Active Directory Account Found in " + domain + " domain");
                }
            }

            return found;
        }
    }

Чего мне не хватает, чтобы иметь возможность доступа, если пользователь включен или отключен в foreach?

1 ответ

Решение

Ваша проблема в том, что пользователь не имеет никакого отношения к результатам вашего поиска или цикла; это просто шаблон для поиска. Также обратите внимание, что если результат не найден, вы не войдете в цикл (results будет пусто) и поэтому тестирование на null не имеет смысла. Кроме того, ваш found настройки кажутся неправильными.

if (!results.Any())
    Helpers.LogMessage("No Active Directory Account Found in " + domain + " domain");
else {
    var found = false;

    foreach (UserPrincipal result in results) {
        found = !result.Enabled;
        if (found)
            Helpers.LogMessage("Active Directory User Account is Disabled in " + domain + " domain");   
        else
            Helpers.LogMessage("Active Directory Account is Enabled in " + domain + " domain");
    }
}
Другие вопросы по тегам