Monday, March 7, 2011

C# Create OU in Active Directory

I'm struggling to create an OU for Active Directory using the code below.

strPath = "OU=TestOU,DC=Internal,DC=Com"

DirectoryEntry objOU; 
objOU = ADentry.Children.Add(strPath, "OrganizationalUnit");
objOU.CommitChanges();

The problem is strPath contains the full path 'OU=TestOU,DC=Internal,DC=net' so using .Children.Add is making the ldap path 'OU=TestOU,DC=Internal,DC=net,DC=Internal,DC=net' which results in an error as the domain obviously doesn't exist.

My question is can I create an OU using strPath without .Children.Add?

I'm not familiar with AD and this is something I inherited from the guy before me.

From stackoverflow
  • try this using System; using System.DirectoryServices;

    namespace ADAM_Examples
    {
        class CreateOU
        {
            /// <summary>
            /// Create AD LDS Organizational Unit.
            /// </summary>
            [STAThread]
            static void Main()
            {
                DirectoryEntry objADAM;  // Binding object.
                DirectoryEntry objOU;    // Organizational unit.
                string strDescription;   // Description of OU.
                string strOU;            // Organiztional unit.
                string strPath;          // Binding path.
            // Construct the binding string.
            strPath = "LDAP://localhost:389/O=Fabrikam,C=US";
    
            Console.WriteLine("Bind to: {0}", strPath);
    
            // Get AD LDS object.
            try
            {
                objADAM = new DirectoryEntry(strPath);
                objADAM.RefreshCache();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:   Bind failed.");
                Console.WriteLine("         {0}", e.Message);
                return;
            }
    
            // Specify Organizational Unit.
            strOU = "OU=TestOU";
            strDescription = "AD LDS Test Organizational Unit";
            Console.WriteLine("Create:  {0}", strOU);
    
            // Create Organizational Unit.
            try
            {
                objOU = objADAM.Children.Add(strOU,
                    "OrganizationalUnit");
                objOU.Properties["description"].Add(strDescription);
                objOU.CommitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error:   Create failed.");
                Console.WriteLine("         {0}", e.Message);
                return;
            }
    
            // Output Organizational Unit attributes.
            Console.WriteLine("Success: Create succeeded.");
            Console.WriteLine("Name:    {0}", objOU.Name);
            Console.WriteLine("         {0}",
                objOU.Properties["description"].Value);
            return;
        }
    }
    }
    
  • The only way to create an object with System.DirectoryServices is to create a DirectoryEntry object to the parent and use DirectoryEntry.Children.Add.

    I think your best move at this point is to use the path you have and extract the part you need ("OU=something").

  • I think your best move at this point is to use the path you have and extract the part you need ("OU=something").

    Thanks Steve

0 comments:

Post a Comment