用部分名称搜索UserPrincipal

本文关键字:搜索 UserPrincipal 用部 | 更新日期: 2023-09-27 18:15:23

在开始之前,我想明确说明,我可以使用DirectoryServices名称空间来完成此操作。我只是想知道如何实现我下面的问题不使用DirectoryServices。

我想做的是使用DirectoryServices.AccountManagement.UserPrincipal类对用户帐户进行部分名称搜索。问题是,我想获得以下属性:EmailAddress, GivenName, midlename,姓氏等。注意:我正在寻找的所有属性都暴露在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数据类型中暴露的属性?或者这是不可能的?

用部分名称搜索UserPrincipal

不能将Principal对象转换为UserPrincipal对象吗?可能会捕获无效的类型转换。

    return searcher.FindAll().Cast<UserPrincipal>();

Principal似乎是一个抽象基类http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.principal (v = vs.110) . aspx