我正在尝试使用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);
}
}