尝试使用空格创建组织单位时出错

时间:2017-05-01 22:00:16

标签: c# active-directory directoryentry organizational-unit

所以我有一个程序需要在另一个OU下添加一个新的组织单位。格式必须与下面的代码一样。问题是如果我在名称中加入空格,我会继续得到相同的异常。我可以手动添加带空格的OU。我在这做错了什么?

以下是代码:

        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 个答案:

答案 0 :(得分:1)

重命名OU似乎不是理想的解决方案。 只需尝试使用反斜杠转义空格

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

This article显示使用LDAP与AD时必须转义的字符。

答案 1 :(得分:0)

所以,我目前正在使用一种解决方法,但我觉得我不应该这样做。基本上,我现在正在创建一个没有空格的临时OU名称,然后我重命名它。

DirectoryEntries des = entry.Children;
DirectoryEntry badObject = des.Find(ou);
badObject.Rename("OU=With Spaces 99999");
entry.CommitChanges();