Найти, если 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");
}
}