Ошибка C# при создании организационной единицы с пробелами

Таким образом, у меня есть программа, которая должна добавить новую организационную единицу под другим подразделением. Формат должен быть таким, как в приведенном ниже коде. Проблема в том, что я получаю одно и то же исключение, если в имени ставлю пробелы. Я могу вручную добавить подразделения с пробелами. Что я тут делаю не так?

Вот код:

        string ou = "OU=" + "New Company 99999";

        try
        {
            if (DirectoryEntry.Exists("LDAP://" + ou + ",OU=MainOrganizationalUnit,DC=domain,DC=com"))
            {
                MessageBox.Show(ou + " exists.");
            }
            else
            {
                MessageBox.Show(ou + " does not exist. Creating...");

                using (DirectoryEntry entry = new DirectoryEntry("LDAP://OU=MainOrganizationalUnit,DC=domain,DC=com"))
                {
                    using (DirectorySearcher searcher = new DirectorySearcher(entry))
                    {
                        searcher.Filter = "(" + ou + ")";
                        searcher.SearchScope = SearchScope.Subtree;
                        SearchResult result = searcher.FindOne();

                        if (result == null)
                        {
                            /* OU Creation */
                            DirectoryEntry de = entry.Children.Add(ou, "organizationalUnit");
                            de.Properties["description"].Value = "This is a Test";
                            de.CommitChanges();
                        }
                    }
                }
            }
        }
        catch (Exception Ex)
        {
            LogWriter.Exception(Ex);
        }

Когда я запускаю этот код, я получаю следующее сообщение об ошибке: System.DirectoryServices.DirectoryServicesCOMException (0x80072037): есть нарушение именования.

в System.DirectoryServices.DirectoryEntry.CommitChanges() в MyProgram.MyStaticClass.function()

2 ответа

Переименование OU не кажется идеальным решением. Просто попробуйте убежать от Пространств с помощью обратной косой черты

string ou = "OU=" + "New\\ Company\\ 99999"; 

В этой статье показаны символы, которые должны быть экранированы при использовании LDAP с AD.

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

DirectoryEntries des = entry.Children;
DirectoryEntry badObject = des.Find(ou);
badObject.Rename("OU=With Spaces 99999");
entry.CommitChanges();
Другие вопросы по тегам