¿Cómo hacer que un subsitio sea de solo lectura en SharePoint usando PowerShell?

Requisito: haga que un subsitio de SharePoint sea de solo lectura.

¡Este método reemplaza todos los demás permisos aplicados en el subsitio con «Leer» y no se puede revertir! ¡Asegúrese de que está procediendo solo en escenarios en los que no necesita revertir el modo de solo lectura (por ejemplo, migración posterior)! Sin embargo, puede realizar una copia de seguridad de los permisos existentes. Si desea configurar la colección de sitios de solo lectura, consulte: ¿Cómo configurar una colección de sitios de SharePoint Online en modo de solo lectura?

¿Cómo hacer que un subsitio sea de solo lectura restableciendo los permisos?

A veces, es posible que deba hacer que un subsitio de SharePoint sea de solo lectura, de modo que los usuarios no puedan modificar su contenido. En este artículo, le mostraré cómo crear un subsitio de solo lectura en SharePoint.

Podemos hacer que un subsitio de SharePoint sea de solo lectura reemplazando todos los permisos de usuarios y grupos con el nivel de permiso «Lectura».

  • Vaya al subsitio >> Haga clic en Configuración del sitio >> Permisos del sitio.
  • En la página de permisos del sitio, deje a todos los usuarios y grupos con derechos de «Lectura», «Solo visualización» o «Acceso limitado» y seleccione el resto.
  • Haga clic en el botón «Editar permisos de usuario» de la cinta para editar en masa los niveles de permiso de los usuarios y grupos seleccionados.
  • ¡Seleccione el nivel de permiso «Leer» y haga clic en «Aceptar» para guardar!
  • Esto establece el subsitio de solo lectura.

    ¡Estos métodos no controlan a los administradores de la granja, a los administradores de la colección de sitios!

    PowerShell para restablecer los permisos del subsitio a solo lectura:

    Aquí está SharePoint PowerShell para hacer que el subsitio sea de solo lectura:

    Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue  #Parameters €SubsiteURL = "https://intranet.crescent.com/legal"  #Get the Subsite €Web = Get-SPWeb €SubsiteURL  #Break Permission Inheritance, if not already If(!€Web.HasUniqueRoleAssignments) {     €Web.BreakRoleInheritance(€true) }  #Get Required Permission Levels €ReadPermission = €web.RoleDefinitions["Read"] €ViewOnlyPermission = €web.RoleDefinitions["View Only"] €LimitedAccessPermission = €web.RoleDefinitions["Limited Access"]  #Add Read Permission to Role Assignment, if not added already ForEach (€RoleAssignment in €Web.RoleAssignments)  {     €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings     If(!(€RoleDefinitionBindings.Contains(€ReadPermission) -or €RoleDefinitionBindings.Contains(€ViewOnlyPermission) -or €RoleDefinitionBindings.Contains(€LimitedAccessPermission)))     {         €RoleAssignment.RoleDefinitionBindings.Add(€ReadPermission)         €RoleAssignment.Update()         Write-host "Added Read Permissions to '€(€RoleAssignment.Member.Name)'" -ForegroundColor Green     } }  #Remove All permissions other than Read or Similar ForEach (€RoleAssignment in €Web.RoleAssignments)  {      €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings     For(€i=€RoleAssignment.RoleDefinitionBindings.Count-1; €i -ge 0; €i--)     {         €RoleDefBinding = €RoleAssignment.RoleDefinitionBindings[€i]          If( (€RoleDefBinding.Name -eq "Read") -or (€RoleDefBinding.Name -eq "View Only") -or (€RoleDefBinding.Name -eq "Limited Access") )         {             Continue;         }         Else         {             €RoleAssignment.RoleDefinitionBindings.Remove(€RoleAssignment.RoleDefinitionBindings[€i])             €RoleAssignment.Update()             Write-host "Removed '€(€RoleDefBinding.Name)' Permissions from '€(€RoleAssignment.Member.Name)'" -ForegroundColor Yellow         }     } } 

    Espere, ¿qué sucede si las listas, bibliotecas, carpetas o archivos en el subsitio tienen un permiso único (¡herencia rota!)? Ampliemos el script para restablecer los permisos en todos los objetos subyacentes.

    Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue  #Function to replace all permission levels granted with "Read" Function Reset-Permissions([Microsoft.SharePoint.SPSecurableObject]€Object) {     #Add Read Permission to Role Assignment, if not added already     ForEach (€RoleAssignment in €Object.RoleAssignments)      {         €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings         If(!(€RoleDefinitionBindings.Contains(€ReadPermission) -or €RoleDefinitionBindings.Contains(€ViewOnlyPermission) -or €RoleDefinitionBindings.Contains(€LimitedAccessPermission)))         {             €RoleAssignment.RoleDefinitionBindings.Add(€ReadPermission)             €RoleAssignment.Update()             Write-host "`tAdded Read Permission to '€(€RoleAssignment.Member.Name)'" -ForegroundColor Green         }     }      #Remove All permissions other than Read or Similar     ForEach (€RoleAssignment in €Object.RoleAssignments)      {          €RoleDefinitionBindings = €RoleAssignment.RoleDefinitionBindings         For(€i=€RoleAssignment.RoleDefinitionBindings.Count-1; €i -ge 0; €i--)         {             €RoleDefBinding = €RoleAssignment.RoleDefinitionBindings[€i]              If( (€RoleDefBinding.Name -eq "Read") -or (€RoleDefBinding.Name -eq "View Only") -or (€RoleDefBinding.Name -eq "Limited Access") )             {                 Continue;             }             Else             {                 €RoleAssignment.RoleDefinitionBindings.Remove(€RoleAssignment.RoleDefinitionBindings[€i])                 €RoleAssignment.Update()                 Write-host "`tRemoved '€(€RoleDefBinding.Name)' Permission from '€(€RoleAssignment.Member.Name)'" -ForegroundColor Yellow             }         }     } }  #Parameters €SubsiteURL = "https://intranet.sharepoint.com/2010"  #Get the Subsite €Web = Get-SPWeb €SubsiteURL  #Break Permission Inheritance of the subsite, if not already If(!€Web.HasUniqueRoleAssignments) {     €Web.BreakRoleInheritance(€true) }  #Get Required Permission Levels €ReadPermission = €web.RoleDefinitions["Read"] €ViewOnlyPermission = €web.RoleDefinitions["View Only"] €LimitedAccessPermission = €web.RoleDefinitions["Limited Access"]  #Call the function to Reset Web permissions Write-host "Resetting Permissions on Web..."-NoNewline Reset-Permissions €Web Write-host "Done!" -f Green  #Array to Skip System Lists and Libraries €SystemLists [email protected]("Converted Forms", "Master Page Gallery", "Customized Reports", "Form Templates", "List Template Gallery", "Theme Gallery",             "Reporting Templates", "Solution Gallery", "Style Library", "Web Part Gallery","Site Assets", "wfpub")    #Loop through each list in the web Foreach (€List in €Web.Lists) {     #Get only lists with unique permissions & Exclude Hidden System libraries     If ((€List.Hidden -eq €false) -and (€SystemLists -notcontains €List.Title) -and (€List.HasUniqueRoleAssignments) )     {         #Call the function to Reset List permissions         Write-host -NoNewline "Resetting Permissions on List '€(€List.title)'..."         Reset-Permissions €List         Write-host "Done!" -f Green     } }  #Check List items with unique permissions Foreach (€List in €Web.Lists) {     #Get only lists with unique permissions & Exclude Hidden System libraries     If ((€List.Hidden -eq €false) -and (€SystemLists -notcontains €List.Title))     {         #Get All list items with unique permissions         €UniqueItems = €List.GetItemsWithUniquePermissions()         If(€UniqueItems.count -gt 0)         {             #Call the function to Reset List Item permissions             Write-host "Resetting Permissions on List Items of '€(€List.title)'"             €UniqueItems | ForEach-Object {                 Reset-Permissions €List.GetItemById(€_.ID)             }                     }     } } 

    Aquí hay otra publicación sobre cómo configurar la lista de SharePoint en modo de solo lectura: ¿Cómo hacer que una lista o biblioteca de SharePoint esté en modo de solo lectura usando PowerShell?