查找是否已使用电子邮件启用/禁用Active Directory

时间:2017-06-19 20:39:13

标签: c# active-directory userprincipal principalsearcher

我试图通过搜索他们的电子邮件地址并检查Enabled属性来查找用户是否拥有Active Directory帐户(如果我将Enabled返回为true - 运行代码,如果我返回false,则运行其他代码,如果结果为null - 返回false,因为该电子邮件不再存在)。当我进入foreach循环时,它发现用户基于 result 中的电子邮件,但使用if和elses进行检查会将 user 返回为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 个答案:

答案 0 :(得分:1)

您的问题是用户与您的搜索结果或循环无关;它只是搜索的模板。另请注意,如果未找到任何结果,则不会进入循环(TableModelEvent将为空),因此对results进行测试毫无意义。此外,您的null设置似乎有误。

found