Active directory 使用C在Active Directory中的特定OU中创建用户#

Active directory 使用C在Active Directory中的特定OU中创建用户#,active-directory,Active Directory,非常感谢marc_提供了我上一期中的以下代码示例 现在,我正在尝试将用户帐户放入特定的OU。将ldapPath保留在PrincipalContext错误中 System.DirectoryServices.AccountManagement.PrincipalOperationException: Unknown error (0x80005000) ---> System.Runtime.InteropServices.COMException (0x80005000): Unknown

非常感谢marc_提供了我上一期中的以下代码示例

现在,我正在尝试将用户帐户放入特定的OU。将ldapPath保留在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,它可以正常工作,但会将用户帐户抛出到用户OU中。我还尝试了LDAP://contoso.com/OU=Domain Users,DC=contoso,DC=com等ldapPath,但没有成功。

我认为您的主要上下文构造函数的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");
我也不确定您是否可以使用internet风格的域名
contoso.com
——请尝试改用NetBIOS风格的
contoso
。因此,在您的情况下,您应该尝试:

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

这对你有用吗???

没错!!我删除了LDAP://并且它工作得很好!保持contoso.com同样有效。谢谢@marc_看起来不错,我如何才能将管理员凭据添加到此中?@DavidGidony:添加到新创建的用户?您只需将该用户添加到
Administrators
group@marc_s嗨,marc,不,我想在DC中添加一个用户,同时将其标识为管理员。什么是这样登录到dc的用户(当不指定用户/通行证时)?@DavidGidony:ah ok-在这种情况下,请查看
PrincipalContext
的重载构造函数-使用正确的重载,您还可以通过提供凭据来定义连接AD的用户
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)
}