Вопрос по active-directory, c#, directory, directoryservices, ldap – Вот использование:

1

ли способ в синтаксисе 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

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

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

Итак, вот метод, написанный на C #, который используетParent свойствоDirectoryEntry.

   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);
  }

Похожие вопросы