2010-05-22 125 views
1

我试图将新对象添加到Active Directory中的现有组织单位。以下代码用于执行此操作。无法在ActiveDirectory中创建新对象

它运行没有错误。但新的对象不是在此之后创建的。请告知我在这里做错了什么。

using System.DirectoryServices; 
using System.DirectoryServices.ActiveDirectory; 

namespace TestAdObjectCreation 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DirectoryEntry root = new DirectoryEntry("LDAP://servername/OU=Services,OU=PCX,DC=q2q,DC=xenyq,DC=com", "Administrator", "pass"); 
      DirectoryEntry newItem = root.Children.Add("test_node", "valid_schema_class_name"); 
      root.CommitChanges(); 
      root.Close(); 
      root.Dispose(); 
     } 
    } 
} 
+1

何浩!最后我得到了它!我在根节点上调用CommitChanges,假定提交将传播到整个子树。但它转向CommitChanges应单独调用每个元素。 – Humanier 2010-05-22 14:54:28

回答

0

你试图创建什么样的对象?

首先,所有LDAP对象始终都有一个前缀,域名组件为DC=,组织单位为OU=,通用名称为CN=。另外,许多LDAP对象对它们需要考虑的有效性的要求最低,例如用户或组必须具有唯一的samAccountName。

所以再次 - 你想创建什么?

如果你将创建代码封装到try..catch中 - 你会得到任何异常吗?如果是这样 - 他们是什么?

static void Main(string[] args) 
{ 
    DirectoryEntry root = new DirectoryEntry("LDAP://servername/OU=Services,OU=PCX,DC=q2q,DC=xenyq,DC=com", "Administrator", "pass"); 

    try 
    { 
     DirectoryEntry newItem = root.Children.Add("CN=test_node", "valid_schema_class_name"); 

     root.CommitChanges(); 
    } 
    catch(Exception exc) 
    { 
     string error = exc.GetType().FullName + ": " + exc.Message; 
    } 
} 
+0

Marc,我试着按照你的建议修改代码。根本没有例外。但是该对象也不是创建的。其实我试图创建一个AD模式中定义的自定义类的对象。 我很感激在这个问题上的任何其他想法。 :) – Humanier 2010-05-22 14:08:35

+0

Marc_s,感谢提供“CN”前缀的提示。 – Humanier 2010-05-22 14:59:53