2009-09-03 9 views
1

J'ai un mauvais jour de répertoire. :)Création d'utilisateurs locaux

Quelqu'un pourrait me dire quel est le problème avec cela?

groupName = "Monkey"; 
... 
using (DirectoryEntry directoryEntryObject = new DirectoryEntry("WinNT://" + Environment.MachineName, "", "", AuthenticationTypes.Secure)) 
{ 
    using (DirectoryEntry group = directoryEntryObject.Children.Add("CN=" + groupName.Trim(), "group")) 
     { 
      group.Properties["sAMAccountName"].Value = groupName; 
      group.CommitChanges(); 
     } 
} 

Ce que j'essaie de faire est de créer un compte local. Lorsque je tente ce code tel quel, il se bloque lorsque je tente de définir la propriété samaccountname:

System.Runtime.InteropServices.COMException occurred 
    Message="The directory property cannot be found in the cache.\r\n" 
    Source="Active Directory" 
    ErrorCode=-2147463153 
    StackTrace: 
     at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.PutEx(Int32 lnControlCode, String bstrName, Object vProp) 
    InnerException: 

Si je commente sur cette ligne, il se bloque engager sur ce qui suit:

System.Runtime.InteropServices.COMException occurred 
    Message="The specified username is invalid. (Exception from HRESULT: 0x8007089A)" 
    Source="System.DirectoryServices" 
    ErrorCode=-2147022694 
    StackTrace: 
     at System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.SetInfo() 
    InnerException: 

Je suis Je ne sais pas quoi penser de la Source. Je suis sur un Vista dans un domaine W2003, mais j'essaye de créer un groupe local, pas un groupe de répertoire actif.

Des idées? J'ai probablement manqué quelque chose d'évident. Je peux créer des utilisateurs en utilisant la méthode GroupPricipal.Save, ce n'est donc pas un problème d'autorisations.

Répondre

3

Essayez this code, je suis sûr que ça va faire l'affaire;)

using System; 
using System.DirectoryServices; 

class Class1 
{ 
    static void Main(string[] args) 
    { 
    try 
     { 
    DirectoryEntry AD = new DirectoryEntry("WinNT://" + 
         Environment.MachineName + ",computer"); 
    DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user"); 
    NewUser.Invoke("SetPassword", new object[] {"#12345Abc"}); 
    NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"}); 
    NewUser.CommitChanges(); 
    DirectoryEntry grp; 

    grp = AD.Children.Find("Guests", "group"); 
    if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});} 
    Console.WriteLine("Account Created Successfully"); 
    Console.ReadLine(); 
    } 
    catch (Exception ex) 
    { 
    Console.WriteLine(ex.Message); 
    Console.ReadLine(); 

    } 
    } 
} 
Questions connexes