C# - 从活动目录中获取所有用户都在经理下

时间:2016-08-10 13:39:30

标签: c# active-directory

我需要在c#中实现代码以获取在给定管理器下工作的用户Active目录。我的以下代码仅返回低于用户的级别,即未提取以下级别的员工。

我的主要要求是准备组织结构图(使用谷歌组织结构图)。

public void GetAllUsers()
{
    //List<User> users = new List<User>();
    try
    {
        DirectoryEntry root = new DirectoryEntry("LDAP://RootDSE");
        root = new DirectoryEntry("LDAP://" + root.Properties["defaultNamingContext"][0]);
        DirectorySearcher search = new DirectorySearcher(root);
        //search.Filter = "(&(objectClass=user)(objectCategory=person))";

        search.Filter = string.Format("(&(objectClass=user)(manager={0}))","CN=abcde a hoss,OU=Policy Excluded Users,OU=HO,DC=sampledomain,DC=com");

        search.PropertiesToLoad.Clear();
        search.PropertiesToLoad.Add("distinguishedname");
        search.PropertiesToLoad.Add("displayname");
        search.PropertiesToLoad.Add("manager");
        search.PropertiesToLoad.Add("title");
        search.PropertiesToLoad.Add("sAMAccountName");
        //ds.ServerPageTimeLimit = TimeSpan.FromSeconds(2);
        //ds.Filter = string.Format(expression, userDN);

        SearchResultCollection r = search.FindAll();
        if (r != null)
        {
            Response.Write("<table border='1'><tr><th>Distinguished Name</th><th>Display Name</th><th>Manager</th><th>Title</th><th>sAMAccountName</th></tr>");
            foreach (SearchResult result in r)
            {
                ADUser user = new ADUser();
                user.DistinguishedName = (result.Properties["distinguishedname"].Count > 0) ? Convert.ToString(result.Properties["distinguishedname"][0]) : "";
                user.DisplayName = (result.Properties["displayname"].Count > 0) ? Convert.ToString(result.Properties["displayname"][0]) : "";
                user.Manager_DistinguishedName = (result.Properties["manager"].Count > 0) ? Convert.ToString(result.Properties["manager"][0]) : "";
                user.Title = (result.Properties["title"].Count > 0) ? Convert.ToString(result.Properties["title"][0]) : "";
                user.sAMAccountName = (result.Properties["sAMAccountName"].Count > 0) ? Convert.ToString(result.Properties["sAMAccountName"][0]) : "";

                if (!string.IsNullOrEmpty(user.Manager_DistinguishedName))
                {
                    Response.Write("<tr><td>" + user.DistinguishedName + " </td><td> " + user.DisplayName + " </td><td> " + user.Manager_DistinguishedName + " </td><td> " + user.Title + " </td><td> " + user.sAMAccountName + "</td></tr>");                    
                    users.Add(user);
                }
            }

            Response.Write("</table>");

        }


        hdnData.Value = js.Serialize(users);
    }
    catch (Exception ex)
    {

    }
}

此外,当尝试使用以下表达式从AD获取所有用户时,它还会返回那些未映射的用户。

search.Filter = "(&(objectClass=user)(objectCategory=person))";

如上所述,我的员工人数仅比员工低1级,而且不会超过hirarchy。考虑这个例子; A是最高经理。 B和C向经理A报告 D和E向B报告进一步F向C报告。 现在,当我通过A的详细信息时,我只获得用户B和C.

请知道我错过了什么。

0 个答案:

没有答案