2008-12-30 20 views
5

Ich habe Schwierigkeiten, eine Organisationseinheit für Active Directory mit dem folgenden Code zu erstellen.C# Erstellen einer Organisationseinheit in Active Directory

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

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

Das Problem ist strPath enthält den vollständigen Pfad 'OU = TestOU, DC = Internal, DC = net' so mit .Children.Add den LDAP-Pfad macht ‚OU = TestOU, DC = Internal, DC = net, DC = Intern, DC = net ', was zu einem Fehler führt, da die Domain offensichtlich nicht existiert.

Meine Frage ist, kann ich eine OU mit strPath ohne .Children.Add erstellen?

Ich bin nicht vertraut mit AD und das ist etwas, das ich von dem Kerl vor mir geerbt habe.

Antwort

12

versuchen, diese

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; 
    } 
} 
} 
4

Die einzige Möglichkeit, ein Objekt mit System.DirectoryServices zu erstellen, ist ein Directory Objekt an die Eltern zu erstellen und DirectoryEntry.Children.Add verwenden.

Ich denke, deine beste Bewegung an diesem Punkt ist, den Pfad zu verwenden, den du hast, und den Teil zu extrahieren, den du brauchst ("OU = etwas").

1

Nein, das geht nicht. Aber Sie haben einige Fehler in Ihrem Code, versuchen Sie dies:

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(); 
Verwandte Themen