使用.NET在sAMAccountName中创建具有超过20个字符的用户时出错

时间:2012-01-27 16:41:43

标签: c# .net vb.net active-directory

我正在尝试以编程方式创建一个新的Active Directory用户,使用大于20个字符的值设置sAMAccountName属性。

当我调用DirectoryEntry.CommitChanges()时,我收到错误:

  

00000523:SysErr:DSID-031A0FB6,问题22(参数无效),数据0

如果我尝试创建一个新用户设置sAMAccountName小于20个字符,一切正常。

在有人说sAMAccountName的限制是20个字符之前,我想指出如果我尝试使用Windows工具“Active Directory用户和计算机”创建具有sAMAccountName超过20个字符的同一用户,一切正常。我可以使用LDP工具在AD中看到新条目,并且条目的sAMAccountName超过20个字符。

为什么我不能使用.NET以编程方式创建用户?

以下是我正在使用的代码:

Using objDirEnt As DirectoryEntry = New DirectoryEntry("LDAP://my.domain.com/cn=Users,dc=my,dc=domain,dc=com", "username", "Password", AuthenticationTypes.Secure Or AuthenticationTypes.Sealing)
    Using usuario As DirectoryEntry = objDirEnt.Children.Add("CN=aaaaaa bbbbbbbbbb ccccccccc (aaaaaa.bbbbbb.ccccccccc)", "user")
        usuario.Properties("sAMAccountName").Value = "aaaaaa.bbbbbb.ccccccccc"
        usuario.Properties("userAccountControl").Value = AdsUserFlags.PasswordNotRequired
        usuario.Properties("name").Value = "aaaaaa bbbbbbbbbb ccccccccc"
        usuario.Properties("givenName").Value = "aaaaaa"
        usuario.Properties("sn").Value = "bbbbbbbbbb ccccccccc"
        usuario.CommitChanges()
    End Using
End Using

2 个答案:

答案 0 :(得分:8)

根据这篇文章,该字段的默认限制少于20个字符: http://msdn.microsoft.com/en-us/library/ms679635.aspx 我没有尝试使用20chars sAMAccountName创建用户,但可能使用Novell LDAP库。我不得不使用它,因为我们也需要支持其他LDAP服务。 http://www.novell.com/coolsolutions/feature/11204.html

我还发现了这些帖子: https://serverfault.com/questions/344815/how-to-add-a-user-in-active-directory-with-name-longer-than-20-characters

答案 1 :(得分:0)

正如@stylefish解释的那样,根据to Microsoft documentation这是一个特色。你或许可以通过某种方式放在那里超过20个字符,但我非常确定20个第一个字符必须是森林中的唯一字符。

如果要为用户登录使用更多字符,则必须使用userPrincipalName(格式为login @ Dns-Domain)。在W2K3架构中,此属性的长度限制为1023个字符。您可以计算摘要MD5以计算相应的samAccountName。