2012-01-03 15 views
5

बहुत धन्यवाद का उपयोग कर सी #, मेरे पिछले मुद्दा Creating user in Active Directory with C# errorsनिम्नलिखित कोड नमूना के लिए marc_s को

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

अब मैं एक विशिष्ट OU में उपयोगकर्ता खाता प्राप्त करने के लिए कोशिश कर रहा हूँ से सक्रिय निर्देशिका में एक विशिष्ट OU में उपयोगकर्ता बनाना । 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 

में ldapPath रखते हुए और अगर मैं ldapPath निकालने के लिए, यह ठीक काम करता है, लेकिन उपयोगकर्ता OU में उपयोगकर्ता खाते फेंकता है। मैंने एलडीएपी की तरह ldapPath भी कोशिश की: //contoso.com/OU= डोमेन उपयोगकर्ता, डीसी = contoso, डीसी = कॉम, जो काम नहीं किया।

उत्तर

13

मुझे लगता है कि आप LDAP पथ अपने प्रमुख संदर्भ निर्माता के लिए एक सा गलत है - अगर आप MSDN लेख मैं तुम्हें दे दी है के लिए लिंक की जाँच, आप देखेंगे:

// 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"); 

मैं भी नहीं कर रहा हूँ सुनिश्चित करें कि आप इंटरनेट-शैली डोमेन नाम contoso.com का उपयोग कर सकते हैं - इसके बजाय NetBIOS शैली का उपयोग करने का प्रयास करें। तो आपके मामले में, आपको यह प्रयास करना चाहिए:

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

क्या यह आपके लिए काम करता है ??

+1

ऐसा किया !! मैंने एलडीएपी हटा दिया: // और यह बहुत अच्छा काम करता है! contoso.com को भी काम करता है। धन्यवाद!! –

+0

@marc_s अच्छा लग रहा है, मैं इसे व्यवस्थापक प्रमाण-पत्र कैसे जोड़ सकता हूं? –

+0

@ डेविड गिडनी: नव निर्मित उपयोगकर्ता को? आपको उस उपयोगकर्ता को 'व्यवस्थापक' समूह –

संबंधित मुद्दे