Búsqueda de sitios web

Eliminar permisos únicos (restablecer herencia rota) en SharePoint 2013/2016 usando PowerShell


Tenemos el requisito de restablecer los permisos personalizados de un gran conjunto de bibliotecas y documentos de SharePoint. Podemos restablecer la herencia de permisos y eliminar permisos únicos para un nivel de sitio/web/carpeta/elemento donde la herencia se rompió previamente. Por ejemplo, para una biblioteca:

  1. Vaya a su biblioteca, haga clic en Configuración de la biblioteca.
  2. En la página de configuración, en usuarios y permisos, haga clic en "Permisos para esta biblioteca de documentos".
  3. Haga clic en el botón "Eliminar permisos únicos" en la cinta del grupo Herencia.

Para el nivel de sitio, debe hacer esto desde Configuración del sitio >> Enlace de permisos del sitio. Y para el nivel de carpeta/elemento de lista/archivo, puede hacer lo mismo: Haga clic en el botón "Compartido con" de la cinta (puede obtener lo mismo en el menú contextual de elementos) >> Haga clic en Avanzado >> y haga clic en “Eliminar permisos únicos”.

Los niveles de permiso están configurados para heredarse del padre y el nivel de permiso se actualiza para reflejar los cambios. ¡Está bien!

No hace falta decir que seleccionar todas y cada una de las bibliotecas y archivos individuales para eliminar permisos únicos es tedioso; ¡Escribí este script de PowerShell para hacer magia! Aquí están mis scripts de PowerShell para eliminar permisos únicos en los niveles web, de lista, de carpeta y de elementos de lista.

Importante: los permisos de SharePoint 2013 se heredan del nivel web. Por lo tanto, si interrumpe o restablece la herencia en el nivel superior (todas las listas, bibliotecas, carpetas y archivos heredarán los permisos como en la web principal), ¡los permisos personalizados a nivel de lista/carpeta/elemento se perderán!

Restablecer herencia a nivel de sitio usando PowerShell:


Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue

#Variables for Web URL, List Name
$WebURL ="https://intranet.crescent.com/marketing"

#get the list object
$web = Get-SPWeb $WebURL

# Check if web has Unique permission - Root webs always uses Unique permission
if ( ($web.HasUniqueRoleAssignments) -and ($web.IsRootWeb -eq $false ) )
 {
      #Reset broken inheritance
      $web.ResetRoleInheritance()
      Write-host "Broken Inheritance Reset on web:" $web.URL
 }

SharePoint restablece los permisos rotos en una lista:


Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue

#Variables for Web URL, List Name
$WebURL ="https://intranet.crescent.com/marketing/"
$ListName ="Invoices" 

#get the list object
$List = (Get-SPweb $WebURL).lists.TryGetList($ListName)

# If List Exists with Unique permission
if ( ($list -ne $null) -and ($list.HasUniqueRoleAssignments) )
 {
      #Reset broken list inheritance
      $list.ResetRoleInheritance()
      Write-host "Broken Inheritance Reset on List:" $list.Title
 }

 <#To Reset Folder level inheritance, Use:
 foreach ($folder in $list.Folders) 
   {  
        if ($folder.HasUniqueRoleAssignments) 
        { 
            Write-Host "Resetting Folder inheritance at:" $folder.Url   
            $folder.ResetRoleInheritance()  
            $folder.Update() 
        } 
   }
 #>

Eliminar permisos únicos en todas las listas:


Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue

#Variable for Web URL
$WebURL ="https://intranet.crescent.com/marketing/"

#get Web object
$Web = Get-SPWeb $WebURL

#Get Lists with Unique permissions - Exclude Hidden lists
$ListColl =  $web.lists | Where-Object  {  ($_.HasUniqueRoleAssignments -eq $true)  -and ($_.hidden -eq $false) }

#Enumerate through each list and reset permission inheritance
foreach($list in $ListColl) #if($list) #Exists
 {
      #Reset list inheritance
      $list.ResetRoleInheritance()
      Write-host "Broken Inheritance Reset on List:" $list.Title
 }

Eliminar permisos únicos en elementos de la lista:


Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue

#Variables for Web URL, List Name
$WebURL ="https://intranet.crescent.com/marketing/"
$ListName ="Invoices" 

#Get the list items with Unique permissions
$ListItems = (Get-SPweb $WebURL).lists.TryGetList($ListName).Items | Where {$_.HasUniqueRoleAssignments}

# If List Exists with Unique permission
Foreach($ListItem in $ListItems)
 {
      #Reset broken list item inheritance
       $ListItem.ResetRoleInheritance()
      Write-host "Broken Inheritance Reset on List Item:" $ListItem.URL
 }

También podemos eliminar permisos únicos de todos los elementos de la lista en una sola línea como:


(Get-SPweb "https://intranet.crescent.com/marketing/").Lists["Invoices"].Items | Foreach-Object{ $_.ResetRoleInheritance() }

Artículos Relacionados:

  • Romper la herencia en SharePoint usando PowerShell
  • Informe de permisos únicos de SharePoint
¡Los permisos únicos matan el rendimiento, en general! ¡Así que evítelo siempre que sea posible!

Artículos relacionados