SharePoint – Rechte eines Benutzer in SiteCollection entfernen

06.05.2018 0 Von Frank

Ab und an kann es notwendig werden, dass man die Rechte eines Benutzers oder auch einer Gruppe in den Webs einer SiteCollection entfernen muss.
Für diesen Anwendungsfall kann die unten genannte PowerShell-Funktion per SharePoint-Management-Shell verwendet werden.

Das Skript prüft, ob es sich um einen Benutzer oder eine Gruppe handelt und entfernt die Rechte in diesem Fall.
Falls die Rechte eines Webs von dem übergeordneten Web weitervererbt werden, ist dies natürlich nicht notwendig.

Beim Aufruf übergibt man folgende 3 Parameter:

  1. $siteUrl: Hierbei handelt es sich um die URL der SiteCollection, bei der Rechte entfernt werden sollen.
  2. $accountName: Der Benutzer oder die Gruppe, für die die Rechte in allen Webs der SiteCollection entfernt werden sollen.
  3. $skipRootSite: Angabe, ob die RootSite bei der Rechte-Beseitigung übersprungen werden soll.
    • $true: Die RootSite überspringen
    • $false: Auch die Rechte des Accounts innerhalb des Root-Webs entfernen.

Fehlerbehandlung und ggf. erwünschte Ausgaben müssen noch ergänzt werden.

function global:PB-RemoveAccPrivFromSite(
  [Parameter(Mandatory=$true)] [string]$siteURL,
  [Parameter(Mandatory=$true)] [string]$accountName,
  [Parameter(Mandatory=$false)] [boolean]$skipRootSite = $false )
{
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
  #SP-Site auslesen
  $site_acc = Get-SPSite -Identity $siteURL
  
  #Prüfen, ob Account User oder Gruppe
  $rootWeb = $site_acc.RootWeb
  if ($accountName.Contains("\")) { 
    $account = $rootWeb.EnsureUser($accountName)
  }
  else {
    $account = $rootWeb.SiteGroups[$accountName]
  }
  $rootWeb.Dispose()
    
  #Durch jedes Web der SiteCollection loopen
  $site_acc | Get-SPWeb -limit all | ForEach-Object {
    #Prüfen, ob die RootSite überprungen werden soll
    if (($skipRootSite) -and ($site_acc.Url -eq $_.Url)) {
      #Überspringen
    }
    else {
      #Prüfen, ob die Rechte vererbt werden.. falls nicht: Rechte des Accounts für das Web entfernen
      if ($_.HasUniqueRoleAssignments) {
        $_.RoleAssignments.Remove($account)
      }
      else {
        #Nichts
      }
    }
  }
  #Abschluss
  $site_acc.Dispose()
  })
}