使用部分名称搜索UserPrincipal

时间:2014-07-29 18:46:34

标签: c# directoryservices

在开始之前,我想明确表示我可以使用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数据类型中公开的属性?或者这不可能吗?

1 个答案:

答案 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