C#ASP.NET - 为活动和“暂停”用户搜索AD

时间:2016-03-23 10:28:29

标签: c# asp.net active-directory directoryservices

我有一个脚本,将在用户请求新用户时执行。

此脚本将使用用户提供的用户名,并搜索AD以查看它是否存在。这非常正常,但我们的IT部门有账户到期日。这导致帐户处于某种“暂停”状态,而不是被禁用,直到它被移动到离开的员工的单独OU中。

C#AD搜索忽略了这些已暂停的帐户。

之前有没有人遇到过这个问题?或者是否有人知道如何在搜索中容纳这些用户?

public static string ADSearch(string ADPart, string Alias)
{
    System.DirectoryServices.DirectoryEntry dirEntry = default(System.DirectoryServices.DirectoryEntry);
    System.DirectoryServices.DirectorySearcher dirSearcher = default(System.DirectoryServices.DirectorySearcher);
    try
    {
        dirEntry = new System.DirectoryServices.DirectoryEntry("LDAP://LDAP DETAILS HERE");

        dirSearcher = new System.DirectoryServices.DirectorySearcher(dirEntry);
        dirSearcher.Filter = "(samaccountname=" + Alias + ")";

        dirSearcher.PropertiesToLoad.Add("GivenName");
        //Users first name
        dirSearcher.PropertiesToLoad.Add("sn");
        //Users last name
        dirSearcher.PropertiesToLoad.Add("mail");
        //Users e-mail
        dirSearcher.PropertiesToLoad.Add("samaccountname");
        //Samaccount
        StringBuilder groupNames = new StringBuilder(); //stuff them in | delimited


        SearchResult sr = dirSearcher.FindOne();
        //return false if user isn't found


        if (sr != null)
            if (ADPart == "GivenName")
                return sr.Properties["GivenName"][0].ToString().Replace("'", "");
            else if (ADPart == "sn")
                return sr.Properties["sn"][0].ToString().Replace("'", "");
            else if (ADPart == "mail")
                return sr.Properties["mail"][0].ToString().Replace("'", "");
            else if (ADPart == "alias")
                return sr.Properties["samaccountname"][0].ToString().Replace("'", "");
            else
                return null;
        else
            return null;

        // return false if exception occurs
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}

可能值得注意的是,我没有编写此代码,而且它已经存在。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这里有一些适合你的代码。

首先,添加" accountExpires"到PropertiesToLoad,然后您可以使用它来查看帐户是否已过期:

var isExpired = false;
if (sr.Properties.Contains("accountExpires")) {
    var expiry = (long)sr.Properties["accountExpires"][0];
    if (!expiry.Equals(9223372036854775807) && !expiry.Equals(0)) {
        isExpired = DateTime.FromFileTime(expiry) <= DateTime.Now;
    }
}

幻数是因为,the documentation states,&#34;值为0或0x7FFFFFFFFFFFFFFF(9223372036854775807)表示该帐户永不过期。&#34;