如何用C# WinForm创建AD用户并正确设置电话号码属性?
解决C# WinForm设置AD用户电话号码的问题
可以通过C# WinForm设置AD用户的电话号码,你遇到的问题是UserPrincipal类没有直接暴露telephone属性,需要通过以下两种方式解决:
方法一:扩展UserPrincipal类
创建自定义的用户主体类,扩展UserPrincipal并添加电话号码属性,映射AD原生的telephoneNumber字段:
using System.DirectoryServices.AccountManagement; [DirectoryRdnPrefix("CN")] [DirectoryObjectClass("user")] public class CustomUserPrincipal : UserPrincipal { public CustomUserPrincipal(PrincipalContext context) : base(context) { } [DirectoryProperty("telephoneNumber")] public string TelephoneNumber { get { if (ExtensionGet("telephoneNumber").Length > 0) return (string)ExtensionGet("telephoneNumber")[0]; return null; } set { ExtensionSet("telephoneNumber", value); } } }
使用该类创建用户并设置电话号码:
using (var context = new PrincipalContext(ContextType.Domain)) { using (var newUser = new CustomUserPrincipal(context)) { newUser.SamAccountName = username; newUser.GivenName = firstName; newUser.Surname = lastName; newUser.SetPassword(password); newUser.Enabled = true; newUser.Description = OutputMail.Text; newUser.TelephoneNumber = phoneNumber; newUser.Save(); } }
方法二:通过DirectoryEntry直接修改属性
如果不想扩展类,可在保存UserPrincipal后,获取底层DirectoryEntry对象修改电话号码:
using (var context = new PrincipalContext(ContextType.Domain)) { using (var newUser = new UserPrincipal(context)) { newUser.SamAccountName = username; newUser.GivenName = firstName; newUser.Surname = lastName; newUser.SetPassword(password); newUser.Enabled = true; newUser.Description = OutputMail.Text; newUser.Save(); // 修改AD用户电话号码属性 using (DirectoryEntry de = newUser.GetUnderlyingObject() as DirectoryEntry) { de.Properties["telephoneNumber"].Value = phoneNumber; de.CommitChanges(); } } }
注意:确保程序运行账号拥有修改AD用户属性的权限,AD中对应的属性字段为telephoneNumber(区分大小写)。
内容的提问来源于stack exchange,提问作者Sabi
相关产品推荐
相关产品推荐

