使用用户主体设置可分辨名称
本文关键字:用户主体 设置 | 更新日期: 2023-09-27 18:37:11
使用DirectoryEntry
时,可以设置新用户帐户的CN,但是如何使用UserPrincipal
呢?该属性是只读的。
// From : http://msdn.microsoft.com/en-us/magazine/cc135979.aspx
DirectoryEntry container = new DirectoryEntry("LDAP://ou=TechWriters,dc=fabrikam,dc=com");
// create a user directory entry in the container
DirectoryEntry newUser = container.Children.Add("cn=user1Acct", "user");
// add the samAccountName mandatory attribute
newUser.Properties["sAMAccountName"].Value = "User1Acct";
// save to the directory
newUser.CommitChanges();
但是使用用户主体:
// For the example
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "ou=TechWriters,dc=fabrikam,dc=com")
{
using (UserPrincipal user = new UserPrincipal(ctx, "User1Acct", "pwd", true))
{
// I would like to do :
user.DistinguishedName = "user1Acct";
//
user.Save();
}
}
不是你想要的答案,但据我所知,那样是不可行的......CN在userprinciple类中受到"保护",因为其他地方太多依赖于稳定信息。
我不知道为什么会把事情混为一谈,但你可以试试这个:
using (var ctx = new PrincipalContext(ContextType.Domain, null, "ou=TechWriters,dc=fabrikam,dc=com"))
{
using (var user = new UserPrincipal(ctx, "User1Acct", "pwd", true))
{
user.Save();
}
using (var entry = new DirectoryEntry("LDAP://cn=User1Acct;ou=TechWriters,dc=fabrikam,dc=com",null,null,AuthenticationTypes.Secure))
{
entry.Rename("cn=user1Acct");
}
}
(也许从userPrinciple获取LDAP字符串而不是硬编码)
不过,我没有能力对此进行测试。