C# Active Directory, создать организационную единицу для каждого подразделения в пути LDAP?

Я пытаюсь создать организационное подразделение для каждого подразделения в пути LDAP, если подразделение не существует, программа не знает имен подразделений или глубины подразделений, в пути может быть 1 подразделение или 10 глубокий.

Пример: strPath = "OU = Test1, OU = Test2, OU = Test3, DC = Internal, DC = net"

Приведенный ниже код извлекает последнее OU 'OU = Test1' из strPath и создает OU, большая проблема, которая у меня есть, заключается в том, что, если Test2 и Test3 также не существуют. Сначала мне нужно создать родительские подразделения. Есть ли у кого-нибудь предложения о том, как я могу это решить?

DirectoryEntry parent;
String strOU = strPath.Substring(0, strPath.IndexOf(@","));
objOU = parent.Children.Add(strOU, "OrganizationalUnit");
objOU.CommitChanges();

Я пробовал использовать метод разделения с массивом, но в итоге получаю каждое подразделение, созданное в корне, а не вложенные подразделения. Проблема в том, что в первую очередь необходимо создать последнее OU в пути (Test3 выше). Также нужно иметь в виду, что Test3 может существовать!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
6 862
1

Ответы 1

Вот какой-то псевдокод о том, как я бы это сделал. Вам просто нужно продолжать добавлять каждое подразделение, начиная с Test3 и заканчивая Test1. Довольно грубо, надеюсь, это имеет смысл.

string strPath = "OU=Test1,OU=Test2,OU=Test3,DC=Internal,DC=net";
// get just DC portion of distinguished name
int dcIndex = strPath.IndexOf("DC = ");
string dcSubString = strPath.Substring(dcIndex);
// get just OU portion of distinguished name
string ouSubString = strPath.Substring(0, dcIndex -1);
string tempDistinguishedName = dcSubString;
string[] ouSubStrings = ouSubString.Split(','); 
for (int i = ouSubStrings.Length - 1; i >= 0; i--)
{
    // bind
    DirectoryEntry parentEntry = new DirectoryEntry(tempDistinguishedName);
    // Create OU
    DirectoryEntry newOU = parentEntry.Children.Add(ouSubStrings[i], "OrganizationalUnit");
    newOU.CommitChanges();
    // create distinguishedName for next bind        
    tempDistinguishedName = ouSubStrings[i] + "," + tempDistinguishedName;
    // clean up unmanaged resources
    newOU.Dispose();
    parentEntry.Dispose(); 
}

Привет, Барнейтрон. Большое спасибо за это, что ты имеешь в виду, говоря «продолжать добавлять»? Спасибо

James May 31.12.2008 03:30

Выполняя код, как вы любезно добавили, я получаю все подразделения, созданные в корне, я предполагаю, что мне нужно что-то повторить, но я не вижу что. Здесь уже поздно, так что завтра посмотрю еще раз. Спасибо

James May 31.12.2008 03:37

Думаю, я привел вам пример с ошибкой. Я давно не работал с командой разработчиков Active Directory. Попробуйте еще раз.

barneytron 31.12.2008 07:31

Другие вопросы по теме