查找Active Directory是否通过电子邮件启用/禁用
问题描述:
我试图通过用他们的电子邮件地址搜索并检查Enabled属性来查找用户是否具有Active Directory帐户(如果我将Enabled作为true - run代码返回,if我返回false - 运行其他代码,如果结果为空 - 返回false,因为该电子邮件不再存在)。当我到达foreach循环时,它发现用户根据他们的电子邮件的结果,但用if和else检查返回用户为NULL。查找Active Directory是否通过电子邮件启用/禁用
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中启用或禁用用户,我缺少什么能够访问?
答
你的问题是用户与你的搜索结果或循环无关;它只是搜索的模板。另请注意,如果未找到结果,则不会进入循环(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");
}
}
你说得对,需要使用UserPrincipal而不是只需要Principal!我现在能够真正检查用户,谢谢!而“发现”实际上处于正确的位置;如果你看到它返回的代码,它会更有意义。 – bubbajake00
除了我不相信'result.Enabled'可能为空吗? – NetMage
对不起,我的意思是它需要在if和else中设置。你已经走到了这一步之外,但仍然是这样。 – bubbajake00