2017-12-07 6 views
0

サブサイトの数が多いSharePointサイトがあります。 いくつかのサイトとサブサイトには、 "a-team"と呼ばれるADグループがあります。SharePointグループを別のグループに置き換えます

"a-team"というグループにはアクセスできなくてはなりません。 "c-team"という新しいグループが作成されました。 私の問題は、 "a-team"があるすべてのサイト/サブサイトで "a-team"を "c-team"に置き換えることです。 "a-team"がシャットダウンしていないサイト/サブサイトには "c-team"が追加されていません。

今すぐコードが "c-team"をすべてのサイト/サブサイトに追加するのは間違っています。グループ「a-team」がサイト/サブサイトにある場合にのみ、グループを追加します。 "a-team"が出ていないサブサイトには "c-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 

答えて

0

。 共有ポイントのグループを置換:

最初に新しいものを追加し、古いものを削除します。

$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(); 
関連する問題