Заменить группу SharePoint другой

У меня есть сайты SharePoint с несколькими дочерними сайтами. На некоторых сайтах и ​​дочерних сайтах есть группа AD под названием "a-team".

Группа "a-team" больше не должна иметь доступа. Была создана новая группа под названием "c-team". Моя проблема состоит в том, чтобы заменить "a-team" на "c-team" на всех сайтах / дочерних сайтах, где есть "a-team". Сайты / дочерние сайты, где нет закрытой команды, не получают добавленную команду.

Прямо сейчас код, добавляющий "c-team" на все сайты / подсайты, является неправильным. Он только добавляет группу, если группа "a-team" находится на сайте / дочернем сайте. Дочерние сайты без команды "a-team" не добавляются.

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://MyTest.demosite.net/sites/EAL"
$permissionLevel = "Design"
$domainGroup = "c:0+.w|s-1-5-21-3475484702-42583850-3077926241-3108" # a-team
$domainGroupAdd = "c:0+.w|s-1-5-21-3475484702-42583850-3077926241-3110" # c-team
$spSite = new-object Microsoft.SharePoint.SPSite($siteUrl)
$firstTime = "true";
$myRole;

foreach ($web in $spSite.AllWebs){
## Finding role ##
$roles = $Web.RoleDefinitions;                
$roleAssignments = $web.RoleAssignments;
if ($firstTime -eq "true")
{
    for($k = 0; $k -lt $roles.Count; $k++){
        Write-Output $web.Url
        $role = $roles[$k]         
        if( $role.Name -eq $permissionLevel)
        {                
            $myRole = $role; # Role fundet                             
        }
    }
    $firstTime = "false";
}    

 ## Adding group "c-team" to site ##
if($roleAssignment.Member.SystemUserKey -eq  $domainGroup){
    Write-Host -ForegroundColor White -BackgroundColor Green "Found the right type " $role.Name;
    $assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($domainGroupAdd, "", "", "");
    $assignment.RoleDefinitionBindings.Add($myRole);
    $roleassignments = $web.RoleAssignments;
    $roleassignments.Add($assignment);
    Write-Output $web.Url;
}

$web.Dispose();
}
$spSite.Dispose();

пример

До:

http://MyTest.demosite.net/sites/EAL" - Site permissions: "a-team", admin
http://MyTest.demosite.net/sites/EAL/Test1" - Site permissions: "a-team", admin
http://MyTest.demosite.net/sites/EAL/Test2" - Site permissions: admin
http://MyTest.demosite.net/sites/EAL/Test3" - Site permissions: "a-team", admin
http://MyTest.demosite.net/sites/EAL/Test4" - Site permissions: admin

After:
http://MyTest.demosite.net/sites/EAL" - Site permissions: "c-team", admin
http://MyTest.demosite.net/sites/EAL/Test1" - Site permissions: "c-team", admin
http://MyTest.demosite.net/sites/EAL/Test2" - Site permissions: admin
http://MyTest.demosite.net/sites/EAL/Test3" - Site permissions: "c-team", admin
http://MyTest.demosite.net/sites/EAL/Test4" - Site permissions: admin

1 ответ

Я нашел решение. Заменить группу в sharepoint:

Сначала добавьте новый, затем удалите старый.

$siteUrl = "http://MyDemosite.demosite.net/sites/EAL" 
$permissionLevel = "Design" 
$oldGroupName    = "eal\a-team" 
$newGroup = "c:0+.w|s-1-5-21-3475484702-42583850-3077926241-3109" 

$spSite = new-object Microsoft.SharePoint.SPSite($siteUrl) 

$firstTime = "true";
$myRole;

foreach ($web in $spSite.allwebs)
{    
    $roles = $web.RoleDefinitions; 

    if ($firstTime -eq "true")
    {
        for($k = 0; $k -lt $roles.Count; $k++)
        {
            Write-Output $web.Url
            $role = $roles[$k]         
            if( $role.Name -eq $permissionLevel)
            {                
                $myRole = $role;                              
            }
        }
        $firstTime = "false";
    }   

    foreach ($name in $web.RoleAssignments.member.displayname) 
    {
        if($name -eq $oldGroupName)
        { 
            Write-Host -ForegroundColor White -BackgroundColor Green "Found the right type " $role.Name
            $assignment = New-Object Microsoft.SharePoint.SPRoleAssignment($newGroup, "", "", "");
            $assignment.RoleDefinitionBindings.Add($myRole);
            $roleassignments = $web.RoleAssignments;
            $roleassignments.Add($assignment);
            Write-Output $web.Url; 
        }
    }
    $web.Dispose();
}
$spSite.Dispose();  

И для удаления группы / пользователя на всех веб-сайтах:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$siteUrl = "http://mydemosite.demosite.net/sites/eal" 
$RemoveGroup = "eal\b-team"
$spSite = new-object Microsoft.SharePoint.SPSite($siteUrl) 

foreach ($web in $spSite.allwebs)
{    
    ## Remove user/group
    foreach ($user in $web.SiteUsers) 
    {
        if ($user.DisplayName -eq $RemoveGroup)
        {
            $web.siteusers.Remove($user) 
            Write-Host -ForegroundColor White -BackgroundColor Green "Found the right user "
        }
    }
    $web.Dispose();
}
$spSite.Dispose();  
Другие вопросы по тегам