2009-09-03 7 views
1

У меня плохой день в каталоге. :)Создание локальных пользователей

Может ли кто-нибудь сказать мне, что в этом плохого?

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(); 
     } 
} 

То, что я пытаюсь сделать, это создать локальную учетную запись. Когда я пытаюсь этот код, как есть, он выходит из строя, когда я пытаюсь установить 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: 

Если я закомментировать эту строку, она падает на коммит следующее:

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: 

Я не уверен, что думать об источнике. Я нахожусь в Vista в домене W2003, но я пытаюсь создать локальную группу, а не активную группу каталогов.

Любые идеи? Я, наверное, пропустил что-то очевидное. Я могу создавать пользователей с помощью метода GroupPricipal.Save, поэтому это не проблема.

ответ

3

this code Попробуйте, я уверен, что он будет делать трюк;)

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

    } 
    } 
} 
Смежные вопросы