我需要在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.
请知道我错过了什么。