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:
- Vaya a su biblioteca, haga clic en Configuración de la biblioteca.
- En la página de configuración, en usuarios y permisos, haga clic en "Permisos para esta biblioteca de documentos".
- 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.
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
