如何通过编程将AD组添加到SharePoint 2010 SPGroup?

3

我尝试通过编程的方式将一个AD组添加到SPGroup中,但并没有成功。

我尝试了以下方法:

SPGroup.AddUsers("myADgroup");

并且

SPGroupCollection.Add(groupName, currentUser, "myADgroup", groupDescription);

我尝试过使用域名和不使用域名两种方式。
有什么想法吗?
4个回答

5

嗯,没有SPGroup.AddUsers("myAdGroup")方法。甚至没有一个格式为AddUser()的方法。

你尝试过以下方法吗:

SPGroup g = web.AssociatedMemberGroup;
SPUser u = web.EnsureUser("DOMAIN\\myADgroup");
g.AddUser(u);

EnsureUser 方法会确保将 AD 组添加为 SPWeb 的用户,以便您可以分配权限。


是的,我尝试过EnsureUser,但它没有起作用。返回用户未找到。 - Fongers
嗯。我不是专家,但我建议如果EnsureUser返回用户未找到,那么您在AD中的组名可能是错误/不同的。我测试了那段代码,在这台机器上运行良好。是否值得检查AD中的名称,并且您正在指定域以及名称。另外,请注意名称中的转义斜杠(“\”)。 - Andy Burns

1

这是对安迪·伯恩答案的跟进:

从PowerShell开始,我最初尝试了以下操作:

$web = Get-SPWeb http://localhost
$web.EnsureUser("domain\test group")

这个不起作用,令人困惑。

经过更多的实验,我发现以下内容是有效的(Power Users 是一个内置组):

$web.EnsureUser("builtin\power users")
$web.EnsureUser("power users")
$web.EnsureUser("test group")

我注意到我的名称(在PowerShell中别名为DisplayName)有不同的值 - 原来我在Active Directory中为“组名”和“组名(pre-Windows 2000)”使用了不同的值。

组名本身可以工作,但是需要使用pre-Windows 2000名称才能使用域前缀。

有了这个,我就能够让以下内容正常工作:

$web.EnsureUser("domain\pre2000 test group")

所以,如果你仍然遇到问题,请检查AD中两个组名称之间的一致性。


1

目前还没有添加AD组的方法。

您需要先创建组,然后将用户添加到该组中。

using (SPSite spSite = new SPSite("http://localhost"))
{
    using (SPWeb spWeb = spSite.OpenWeb())
    {

        SPGroupCollection spGrps = spWeb.SiteGroups;
        SPUser uGrpOwner = spWeb.CurrentUser;
        SPUser uGrpDefMember = spWeb.CurrentUser;
        string sGrpName = "GrupeName";
        spGrps.Add(sGrpName, uGrpOwner, uGrpDefMember, "Decription");

        SPGroup spGrp = spGrps[sGrpName];

        List<SPUser> spUsersFromAD = YouFunctionGetUserFromAD(); 

        foreach(SPUser spUser  in  spUsersFromAD){
            spGrp.AddUser(spUser);
        }
        spWeb.Update();
    }
}

0

我也遇到了使用AD组调用SPWeb.EnsureUser的问题。在我的情况下,有些混淆是因为该组的显示名称与其基础sAMAccountName不同。使用sAMAccountName而不是显示名称调用EnsureUser解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接