我面临一个奇怪的问题。
我想通过提供用户email
作为参数来了解用户的AD帐户是否已被停用。
对于我们组织中的一些用户来说,下面的代码非常适合我。
但对于其他一些用户而言,它返回null
- 虽然我可以手动验证AD中的这些用户集。
请你帮我解决这个问题。
private string GetCurrentDomainPath()
{
DirectoryEntry de =
new DirectoryEntry("LDAP://RootDSE");
return "LDAP://" +
de.Properties["defaultNamingContext"][0].
ToString();
}
public bool? FindAccountStatusByEmail(string email)
{
using (DirectorySearcher dSearch = new DirectorySearcher(new DirectoryEntry(GetCurrentDomainPath())))
{
dSearch.SearchScope = SearchScope.Subtree;
dSearch.Filter = "(&(objectCategory=person)(sAMAccountName=*)(mail=" + email.Trim() + "))";
SearchResult sResult = dSearch.FindOne();
if (sResult != null)
{
DirectoryEntry de = sResult.GetDirectoryEntry();
return IsActive(de);
}
else
{
return null;
}
}
}
private bool IsActive(DirectoryEntry de)
{
if (de.NativeGuid == null)
{
return false;
}
int flags = (int)de.Properties["userAccountControl"].Value;
return !Convert.ToBoolean(flags & 0x0002);
}
更新-1:让我们说我有一个用户的电子邮件地址:abac@mydomain.com
当我通过代码传递此电子邮件地址时,它返回null
。
但是,当我通过Windows提供的工具(查找用户,联系人和组)搜索它时,我能够检索用户。
但刚刚注意到"电子邮件:"用户电子邮件不同的部分
在上图中说abac@mydomainlbs.com
。