使用自定义属性获取广告组成员

时间:2019-02-08 01:50:26

标签: c# active-directory

我正在尝试使用System.DirectoryServices.AccountManagement从AD组中检索用户列表,然后使用UserPrinciple开箱即用地从用户中提取一些不可用的属性。

不幸的是,当我尝试使用通过GetMembers()检索到的用户列表时,出现了转换问题。我已经创建了一个UserPrincipleEx类,它具有程序所需的所有属性。

  

System.InvalidCastException:'无法转换类型的对象   键入“ System.DirectoryServices.AccountManagement.UserPrincipal”   “ UserPrincipalEx”。

var users = group.GetMembers(true);
foreach (UserPrincipalEx u in users)
{
    User.Create(u.DisplayName, u.SamAccountName, u.certificateOrder, u.certificateID);
}

是否可以使用GetMember和UserPrinciple扩展的功能?

编辑1: 这是UserPrincipleEx类。

public class UserPrincipalEx : UserPrincipal
{
    public UserPrincipalEx(PrincipalContext context) : base(context)
    { }
    public UserPrincipalEx(PrincipalContext context, string samAccountName, string password, bool enabled)
            : base(context, samAccountName, password, enabled) { }
    UserPrincipalExSearchFilter searchFilter;
    new public UserPrincipalExSearchFilter AdvancedSearchFilter
    {
        get
        {
            if (null == searchFilter)
                 searchFilter = new UserPrincipalExSearchFilter(this);
                return searchFilter;
            }
        }  
        [DirectoryProperty("certificateID")]
        public string certificateID
        {
            get
            {
                if (ExtensionGet("certificateID").Length != 1)
                    return null;
                return (string)ExtensionGet("certificateID")[0];
            }
            set
            {
                ExtensionSet("certificateID", value);
            }
        }
        [DirectoryProperty("certificateOrder")]
        public string certificateOrder
        {
            get
            {
                if (ExtensionGet("certificateOrder").Length != 1)
                    return null;
                return (string)ExtensionGet("certificateOrder")[0];
            }
            set
            {
                ExtensionSet("certificateOrder", value);
            }
        }
        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);
        }
    }
    public class UserPrincipalExSearchFilter : AdvancedFilters
    {
        public UserPrincipalExSearchFilter(Principal p) : base(p) { }
        public void LogonCount(int value, MatchType mt)
        {
            this.AdvancedFilterSet("LogonCount", value, typeof(int), mt);
        }
    }

0 个答案:

没有答案