分配多个值属性' directReports'使用System.DirectoryServices Active Directory API

时间:2015-04-26 19:07:33

标签: c# active-directory

我最初尝试将多个值作为directReports分配给Active Directory中的用户是使用DirectoryEntry对象并按如下方式分配:

DirectoryEntry de; //get it from somewhere
de.Properties["directReports"].Value = object[] { "CN=user123,CN=Users,DC=DOMAIN,DC=xyz", "dn2", "dn3" };
de.CommitChanges(); //error: contraint violation occurred

它也不适用于"经理"属性。

然后我开始使用UserPrincipal扩展方法(在后台使用DirectoryEntries,对吗?)

    [DirectoryRdnPrefix("CN")]
    [DirectoryObjectClass("Person")]
    public class UserPrincipalEx : UserPrincipal
    {
        public UserPrincipalEx(PrincipalContext pc)
            : base(pc)
        {
        }

        public void SetManager(string value)
        {
            this.ExtensionSet("manager", value);
        }

        public void SetDirectReports(string[] values)
        {
            //foreach(var v in values)
            this.ExtensionSet("directReports", values);
        }

        public static new UserPrincipalEx FindByIdentity(PrincipalContext context, string identityValue)
        {
            return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityValue);
        }

        public static new UserPrincipalEx FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
        {
            return (UserPrincipalEx)FindByIdentityWithType(context, typeof(UserPrincipalEx), identityType, identityValue);
        }
    }

通过发送专有名称字符串来分配经理可以正常工作,但它不适用于直接下属。我仍然得到InvalidOperationException: A constraint violation occurred.

我试图这样称呼它:

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "mazen", user, pass);
UserPrincipalEx up = UserPrincipalEx.FindByIdentity(pc, IdentityType.SamAccountName, "moses");
var dns = new string[] { "CN=someone,CN=Users,DC=DOMAIN,DC=xyz", "CN=anotherone,CN=Users,DC=DOMAIN,DC=xyz" };
up.SetDirectReports(dns);

如何使用C#分配直接报告多值属性?

1 个答案:

答案 0 :(得分:1)

我认为directReports是Active Directory中的计算字段。

如果您有10名员工与同一位经理,那么该经理的directReports财产将列出所有这10名员工。

不能直接设置该属性 - 您必须设置员工的manager属性,然后设置经理的directReports属性将由Active Directory自动设置