2012-01-03 42 views
5

Nhiều nhờ marc_s cho mẫu mã sau đây, từ phát hành trước đây của tôi Creating user in Active Directory with C# errorsTạo người dùng trong một OU cụ thể trong Active Directory sử dụng C#

public static string ldapPath = "LDAP://OU=Domain Users,DC=contoso,DC=com"; 
public static string CreateUserAccount(string userName, string userPassword) 
{ 
    // set up domain context 
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "contoso.com",ldapPath); 

    // create a user principal object 
    UserPrincipal user = new UserPrincipal(ctx, userName, userPassword, true); 

    // assign some properties to the user principal 
    user.GivenName = "User"; 
    user.Surname = "One"; 

    // force the user to change password at next logon 
    user.ExpirePasswordNow(); 

    // save the user to the directory 
    user.Save(); 

    return user.SamAccountName; 
} 

Bây giờ tôi đang cố gắng để có được những tài khoản người dùng vào một OU cụ thể . Giữ ldapPath trong các lỗi PrincipalContext

System.DirectoryServices.AccountManagement.PrincipalOperationException: Unknown error (0x80005000) ---> System.Runtime.InteropServices.COMException (0x80005000): Unknown error (0x80005000) 
    at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 
    at System.DirectoryServices.DirectoryEntry.Bind() 
    at System.DirectoryServices.DirectoryEntry.get_SchemaEntry() 
    at System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de) 
    at System.DirectoryServices.AccountManagement.ADStoreCtx..ctor(DirectoryEntry ctxBase, Boolean ownCtxBase, String username, String password, ContextOptions options) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry entry) 
    at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit() 
    --- End of inner exception stack trace --- 
    at System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit() 
    at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit() 
    at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() 
    at System.DirectoryServices.AccountManagement.PrincipalContext.ContextForType(Type t) 
    at System.DirectoryServices.AccountManagement.Principal.GetStoreCtxToUse() 
    at System.DirectoryServices.AccountManagement.Principal.set_SamAccountName(String value) 
    at System.DirectoryServices.AccountManagement.UserPrincipal..ctor(PrincipalContext context, String samAccountName, String password, Boolean enabled) 
    at ADINtegrationTest.ActiveDirectory.CreateUserAccount(String userName, String userPassword) in D:\_data\ADINtegrationTest\ADINtegrationTest\ActiveDirectoryUtils.cs:line 20 
    at ADINtegrationTest.Form1.Form1_Load(Object sender, EventArgs e) in D:\_data\ADINtegrationTest\ADINtegrationTest\Form1.cs:line 32 

Và nếu tôi xóa ldapPath, nó hoạt động tốt, nhưng ném tài khoản người dùng vào OU người dùng. Tôi cũng đã thử ldapPath như LDAP: //contoso.com/OU=Domain Users, DC = contoso, DC = com, không hoạt động.

Trả lời

13

Tôi nghĩ rằng bạn có đường dẫn LDAP một chút sai cho nhà xây dựng bối cảnh chính của bạn - nếu bạn kiểm tra liên kết đến bài viết MSDN Tôi đưa cho bạn, bạn sẽ thấy:

// create a context for a domain called Fabrikam pointed 
// to the TechWriters OU and using default credentials 
PrincipalContext domainContext = 
    new PrincipalContext(ContextType.Domain, "Fabrikam", "ou=TechWriters,dc=fabrikam,dc=com"); 

Tôi cũng không chắc chắn nếu bạn có thể sử dụng tên miền kiểu Internet contoso.com - hãy thử sử dụng kiểu NetBIOS để thay thế. Vì vậy, trong trường hợp của bạn, bạn nên thử:

public static string ldapPath = "OU=Domain Users,DC=contoso,DC=com"; 

public static string CreateUserAccount(string userName, string userPassword) 
{ 
    // set up domain context 
    PrincipalContext ctx = 
     new PrincipalContext(ContextType.Domain, "CONTOSO", ldapPath); 

    // create a user principal object 
    .... (and the rest of your code as you had it) 
} 

Điều đó có hiệu quả với bạn không ??

+1

Đã làm điều đó !! Tôi đã xóa LDAP: // và nó hoạt động tuyệt vời! việc giữ contoso.com cũng hoạt động. Cảm ơn bạn!! –

+0

@marc_s tìm kiếm tốt, làm cách nào tôi có thể thêm thông tin đăng nhập của quản trị viên vào tài khoản này? –

+0

@DavidGidony: cho người dùng mới được tạo? Bạn chỉ cần thêm người dùng đó vào nhóm 'Quản trị viên' –

Các vấn đề liên quan