You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 22:16:03