如何检查 C# 中的 OU 可访问性,DirectoryEntry?

How to check OU accessability in C # , DirectoryEntry?

我正在使用 DirectoryEntry class

正在尝试从特定 OU 和子 OU 中读取所有用户。

以下代码是任务的一部分

using(DirectoryEntry dEntry = new DirectoryEntry(dn))
using(DirectorySearcher dSearcher = new  DirectorySearcher(dEntry))
{
     dSearcher.SearchScope = SearchScope.Subtree;
     dSearcher.Filter = "(&(objectClass=user) (objectCategory=person))";
     foreach(SearchResult in dSearcher.FindAll())
     {
        //Do something...
     }
}

当前用户无法读取某些子 OU。 我得到了任务异常 "one or more error accured" 我正在寻找方法来检查 OU 是否不可访问并跳过它。并将该 OU 写入日志。 我试过以下:

 public void GetOu(List<MyUser> list, string path)
 {
     using (DirectoryEntry dEntry = new     DirectoryEntry(path))
     using(DirectorySearcher dSearcher = new DirectorySearcher(dEntry))
     {
           dSearcher.SearcherScope = SearchScope.Subtree;
           dSearcher.Filter = "(objectClass=organizationalUnit)";
           foreach(SearchResult result in dSearcher.FindAll())
           {
               GetUsersFromOU(list,result.GetDirectoryEntry());
            }
       }
 }
public void GetUsersFromOU(List<MyUser> list,DirectoryEntry ou)
{
     using (DirectorySearcher dSearcher = new DirectorySearcher(ou);
     dSearcher.SearchScope = SearchScope.OneLevel;
     dSearcher.Filter = "(&(objectClass=user)(objectCategory=person))";
     foreach (Search result in dSearcher.FindAll())
      {
          //Do something.... update list...
      }
 }

现在没有异常并跳过不可访问的 OU。 1.But 仍然找不到 "bad ou" 是什么 2.run时间是灾难性的...

您必须确保进程的用户 运行 具有执行查找的适当权限。这将是您在桌面应用程序中的 Windows 帐户以及 ASP.NET 应用程序中的应用程序池帐户 运行。