Sharepoint 如何列出SPGroup中的所有SPUser对象?

Sharepoint 如何列出SPGroup中的所有SPUser对象?,sharepoint,active-directory,spgroup,spuser,Sharepoint,Active Directory,Spgroup,Spuser,我需要从SPGroup检索所有SPUser。不幸的是,该组可能包含Active Directory组,因此一个简单的SPGroup.Users是不够的(对于AD组,我只需要一个SPUser,将IsDomainGroup属性设置为true) 有人知道如何获得所有SPUser的列表,并将其降序到SPGroup中包含的任何Active Directory组中吗?除了SPGroup.ContainsCurrentUser之外,是否还有其他方法可以接受SPUser参数?不幸的是,可能不是广告组的每个成员都

我需要从
SPGroup
检索所有
SPUser
。不幸的是,该组可能包含Active Directory组,因此一个简单的
SPGroup.Users
是不够的(对于AD组,我只需要一个
SPUser
,将
IsDomainGroup
属性设置为true)


有人知道如何获得所有
SPUser
的列表,并将其降序到
SPGroup
中包含的任何Active Directory组中吗?除了
SPGroup.ContainsCurrentUser
之外,是否还有其他方法可以接受
SPUser
参数?

不幸的是,可能不是广告组的每个成员都在站点中有相应的SPUser对象(尚未)

在这个场景中,我将枚举active directory组的所有成员,并使用SPWeb的
EnsureUser()
方法将它们强制放到站点中,该方法返回一个
SPUser
,如果站点中不存在,则创建一个新成员

有关枚举active directory成员的指导,请参阅。

基于,我编写了以下代码:

private static List<SPUser> ListUsers(SPWeb web, SPPrincipal group)
{
    try
    {
        web.Site.CatchAccessDeniedException = false;
        var users = new List<SPUser>();
        foreach(SPUser user in web.SiteUsers)
        {
            using(var userContextSite = new SPSite(web.Site.ID, user.UserToken))
            {
                try
                {
                    using (var userContextWeb = userContextSite.OpenWeb(web.ID))
                    {
                        try
                        {
                            if (userContextWeb.SiteGroups[group.Name]
                                .ContainsCurrentUser)
                                    users.Add(user);
                        }
                        catch (SPException)
                        {
                            // group not found, continue
                        }
                    }
                }
                catch(UnauthorizedAccessException)
                {
                    // user does not have right to open this web, continue
                }
            }
        }
        return users;
    }
    finally
    {
        web.Site.CatchAccessDeniedException = true;
    }
}
私有静态列表用户(SPWeb web、SPPrincipal group)
{
尝试
{
web.Site.CatchAccessDeniedException=false;
var users=新列表();
foreach(web.SiteUsers中的SPUser用户)
{
使用(var userContextSite=new SPSite(web.Site.ID,user.UserToken))
{
尝试
{
使用(var userContextWeb=userContextSite.OpenWeb(web.ID))
{
尝试
{
if(userContextWeb.SiteGroups[group.Name]
.containerscurrentUser)
用户。添加(用户);
}
捕获(异常)
{
//找不到组,是否继续
}
}
}
捕获(未经授权的访问例外)
{
//用户无权打开此网站,是否继续
}
}
}
返回用户;
}
最后
{
web.Site.CatchAccessDeniedException=true;
}
}
我不喜欢这样一个事实,即我必须模拟每个用户,而这段代码将只查找已经导入SharePoint的广告用户(因此存在一个
SPUser
),但这对我来说已经足够了