1

我有一个问题,我一直在寻找答案,但找不到合适的答案。我有一个 ASP.Net Web 应用程序,我需要列出特定 OU 的所有子 OU。有谁现在最好怎么做?

例如,我想列出所有 OU Users,然后让用户单击该 OU,然后查看该 OU 中包含的用户列表。我已经能够列出 OU 中的用户,但我目前无法列出子 OU。

这是我已经拥有的代码;

DirectoryEntry Ldap = new DirectoryEntry("LDAP://ou=Users;ou=ASH;ou=Establishments;dc=domain;dc=com", aduser, adpass);
DirectorySearcher searcher = new DirectorySearcher(Ldap);
//specify that you search user only by filtering AD objects
searcher.Filter = "(objectClass=user)";

try
{
   foreach (SearchResult result in searcher.FindAll())
   {
      //loop through each object and display the data in a table
      DirectoryEntry DirEntry = result.GetDirectoryEntry();

      TableRow tblRow = new TableRow();
      TableCell tblcell_Username = new TableCell();
      TableCell tblcell_displayName = new TableCell();
      tblcell_Username.Text = DirEntry.Properties["SAMAccountName"].Value.ToString();
      tblcell_displayName.Text = "";
      tblRow.Controls.Add(tblcell_Username);
      tblRow.Controls.Add(tblcell_displayName);
      ADWeb_Tbl.Rows.Add(tblRow);

      //DEBUG LINES
      //On peut maintenant afficher les informations désirées
      //Response.Write("Login: " + DirEntry.Properties["SAMAccountName"].Value);
   }
}
catch (Exception ex)
{
   Response.Write(ex.Source + "<br />");
   Response.Write(ex.Message + "<br />");
   Response.Write(ex.InnerException);
}

有没有人有什么建议?

感谢您花时间阅读这个问题。

4

1 回答 1

1

两个要点:

  1. 如果您想查找组织单位 - 为什么要搜索用户?!?!?这根本没有意义。使用此代码:

    DirectorySearcher searcher = new DirectorySearcher(Ldap);
    // specify that you search for organizational units 
    searcher.Filter = "(objectCategory=organizationalUnit)";
    searcher.SearchScope = SearchScope.SubTree;  // search entire subtree from here on down
    
  2. 当你从搜索者那里得到结果时,你应该尽量避免调用.GetDirectoryEntry()它们中的每一个。在 - 中指定您需要的属性DirectorySearcher,然后直接在搜索结果中使用这些属性:

    searcher.PropertiesToLoad.Add("sAMAccountName");  // and add any others you need
    
    try
    {
       foreach (SearchResult result in searcher.FindAll())
       {
          TableRow tblRow = new TableRow();
          TableCell tblcell_Username = new TableCell();
          tblcell_Username.Text = result.Properties["SAMAccountName"].ToString();
    
于 2013-06-25T08:42:06.737 回答