Поиск Active Directory для подразделения, используя частичный путь к подразделению - PullRequest
1 голос
/ 03 мая 2011

Есть ли способ в синтаксисе AD Query, чтобы найти полный путь OU путем поиска по его частичному пути?

Например, полный путь к моей OU:

OU=Clerks,OU=OfficeA,OU=Administration,DC=domain,DC=local

Теперь я хотел бы попытаться найти и найти этот объект, используя частичный путь:

OU=Clerks,OU=OfficeA

Я хотел бы иметь возможность искать что-то вроде:

(&(objectCategory=organizationalUnit)(path=Clerks/OfficeA*))

Я не могу найти синтаксических примеров того, как сделать что-то подобное. Разрабатываемая мной программа требует, чтобы я получил пути ко многим подразделениям, которые имеют общую структуру на последних двух уровнях подразделений, однако в противном случае они могут быть вложены на любой заданной глубине в домене. Если бы я мог искать что-то вроде этого, было бы легко получить полный путь, просто выполнив поиск по последним двум вложенным уровням OU.

1 Ответ

2 голосов
/ 03 мая 2011

То, что вы хотите сделать, существует в чистой реализации LDAP, это функция под названием ExtensibleMatch , которая, кажется, правильно объяснена в этой вики-статье .Вы также найдете здесь несколько полезных примеров здесь .

Но его нет в Active-Directory

Так что вот метод, написанный на C #, который использует свойство ParentDirectoryEntry.

   static List<DirectoryEntry> OuInTheFormOf(DirectoryEntry deBase, string ou1, string ou2)
    {
      List<DirectoryEntry> deList = null;

      /* Directory Search
       */
      DirectorySearcher dsLookFor = new DirectorySearcher(deBase);
      dsLookFor.Filter = ou1;
      dsLookFor.SearchScope = SearchScope.Subtree;
      dsLookFor.PropertiesToLoad.Add("ou");

      SearchResultCollection srcOUs = dsLookFor.FindAll();

      if (srcOUs.Count != 0)
      {
        deList = new List<DirectoryEntry>();

        foreach (SearchResult srOU in srcOUs)
        {
          DirectoryEntry deOU = srOU.GetDirectoryEntry();
          if (deOU.Parent.Name.ToUpper() == ou2.ToUpper())
            deList.Add(deOU);
        }
      }
      return deList;
    }

Вот использование:

  /* Connection to Active Directory
   */
  DirectoryEntry deBase = new DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr");

  List<DirectoryEntry> l = OuInTheFormOf(deBase, "ou=Clerks", "ou=OfficeA");

  foreach (DirectoryEntry deTmp in l)
  {
    Console.WriteLine(deTmp.Properties["distinguishedName"].Value);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...