Я пытаюсь создать организационное подразделение для каждого подразделения в пути 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 может существовать!





Вот какой-то псевдокод о том, как я бы это сделал. Вам просто нужно продолжать добавлять каждое подразделение, начиная с 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();
}
Выполняя код, как вы любезно добавили, я получаю все подразделения, созданные в корне, я предполагаю, что мне нужно что-то повторить, но я не вижу что. Здесь уже поздно, так что завтра посмотрю еще раз. Спасибо
Думаю, я привел вам пример с ошибкой. Я давно не работал с командой разработчиков Active Directory. Попробуйте еще раз.
Привет, Барнейтрон. Большое спасибо за это, что ты имеешь в виду, говоря «продолжать добавлять»? Спасибо