C # Create OU in Active Directory

I am trying to create an organizational unit 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 that strPath contains the full path "OU = TestOU, DC = Internal, DC = net", so using .Children.Add makes the path ldap "OU = TestOU, DC = Internal, DC = net, DC = Internal, DC = net ', which leads to an error, because, apparently, the domain does not exist.

My question is: can I create an OU using strPathwithout .Children.Add?

I am not familiar with AD, and this is what I inherited from the guy in front of me.

+5
source share
3 answers

try it

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;
    }
}
}
+12
source

System.DirectoryServices - DirectoryEntry DirectoryEntry.Children.Add.

, - , , ( "OU = something" ).

+4

No, you can’t. But you have some errors in the code, try the following:

 string rootOU = @"LDAP://DC=Internal,DC=Com/OU=Root OU,DC=Internal,DC=Com; // or simply "DC=Internal,DC=Com" instead of "OU=Root OU,DC=Internal,DC=Com" if you want to create your test OU in root
 DirectoryEntry objAD = new DirectoryEntry(rootOU, userName, password);
 DirectoryEntry objOU = objAD.Children.Add("OU=Test OU", "OrganizationalUnit");
 objOU.CommitChanges();
+1
source

All Articles