按用户的电子邮件

时间:2015-06-01 09:48:41

标签: c# active-directory

我面临一个奇怪的问题。 我想通过提供用户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提供的工具(查找用户,联系人和组)搜索它时,我能够检索用户。 enter image description here

但刚刚注意到"电子邮件:"用户电子邮件不同的部分 在上图中说abac@mydomainlbs.com

0 个答案:

没有答案