在开始之前,我想明确表示我可以使用DirectoryServices命名空间来完成此操作。我只是想知道如何在不使用DirectoryServices的情况下实现我的下面的问题。
我要做的是使用DirectoryServices.AccountManagement.UserPrincipal类来部分命名搜索用户帐户。问题是,我想获得以下属性:EmailAddress,GivenName,MiddleName,SurName等。 注意:我正在寻找的所有属性都在UserPrincipal中公开。这是一个使用UserPrincipal但没有部分名称搜索的示例。
using (UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName))
{
return user;
}
从我读过的教程中,我可以使用以下代码进行部分名称搜索:
using (UserPrincipal user = new UserPrincipal(ctx))
{
user.SamAccountName = String.Format("*{0}*", userName);
using (PrincipalSearcher searcher = new PrincipalSearcher())
{
searcher.QueryFilter = user;
return searcher.FindAll();
}
}
这个问题是当我遍历PrincipalSearcher集合(搜索者)时,它是Principal数据类型。 Principal数据类型不包含我上面提到的任何属性。
所以我的问题是,如何使用UserPrincipal进行部分名称搜索并获取未在Principal数据类型中公开的属性?或者这不可能吗?
答案 0 :(得分:1)
您是否无法将Principal对象强制转换为UserPrincipal对象? 也许抓住无效的演员。
return searcher.FindAll().Cast<UserPrincipal>();
Principal似乎是一个抽象的基类 http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principal(v=vs.110).aspx