¿Cómo copiar permisos de una carpeta a otra en SharePoint Online usando PowerShell?

Requisito: copie los permisos de una carpeta a otra en SharePoint Online.

Permisos de copia de SharePoint Online de una carpeta a otra usando PowerShell

¿Alguna vez quiso clonar permisos de una carpeta existente a una nueva carpeta en SharePoint Online? Al trabajar con SharePoint Online, puede haber ocasiones en las que necesite copiar permisos de una carpeta a otra. Puede ser un proceso tedioso si tiene que hacerlo manualmente, y no hay formas más sencillas de hacerlo sin usar herramientas de terceros. ¡Pues ya no! ¡Aquí está el script de PowerShell para copiar permisos de una carpeta a otra en SharePoint Online!

#PowerShell Function to copy permissions between Folders in SharePoint Online Function Copy-PnPFolderPermissions {     [cmdletbinding()]      param(          [Parameter(Mandatory=€True)] [string] €WebURL,          [Parameter(Mandatory=€True)] [string] €SourceFolderURL,          [Parameter(Mandatory=€True)] [string] €TargetFolderURL,          [Parameter(Mandatory=€False)] [Bool] €AppendToExisting = €True      )     Try {         #Connect to PnP Online         Connect-PnPOnline -Url €WebURL -Interactive          #Get the Web         €Web = Get-PnPweb         €Ctx = Get-PnPContext          #Get Source and Target Folders         €SourceFolderItem = Get-PnPFolder -Url €SourceFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments         €SourceFolder = €SourceFolderItem.ListItemAllFields         €TargetFolderItem = Get-PnPFolder -Url €TargetFolderURL -Includes ListItemAllFields.HasUniqueRoleAssignments         €TargetFolder = €TargetFolderItem.ListItemAllFields          #if permissions are Inherited in Target Folder, Break the Inheritance         If(!€TargetFolder.HasUniqueRoleAssignments)         {             If(€AppendToExisting -eq €True)             {                 #Break Folder permissions - keep all existing permissions & Clear Item level permissions                 €TargetFolder.BreakRoleInheritance(€True,€False)             }             else             {                 €TargetFolder.BreakRoleInheritance(€False,€False)             }         }         Else #If the Folder has unique Permissions already         {             If(€AppendToExisting -eq €False)             {                 €TargetFolder.ResetRoleInheritance()                 €TargetFolder.BreakRoleInheritance(€False,€False)             }         }         Invoke-PnPQuery          #Get all permissions assigned to the source folder         €SourceRoleAssignments = Get-PnPProperty -ClientObject €SourceFolder -Property RoleAssignments           #Copy Source Folder permissions to Destination Folder         ForEach(€RoleAssignment in €SourceRoleAssignments)         {             #Get RoleDefinitions of the Role Assignment             Get-PnPProperty -ClientObject €RoleAssignment -Property RoleDefinitionBindings, Member              #Leave the Hidden permissions             If(€RoleAssignment.Member.IsHiddenInUI -eq €False)             {                 €SourcePermissions = €RoleAssignment.RoleDefinitionBindings | Where {€_.Name -notin("Limited Access")}                 €PermissionLevels = (€SourcePermissions | Select -ExpandProperty Name) -join "; "                  If(€SourcePermissions -ne €null)                 {                     #Add Source Folder's Permission Level to the Target Folder                     €RoleDefBindings = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection(€Ctx)                     ForEach(€RoleDefinition in €SourcePermissions)                     {                         €RoleDefBindings.Add(€RoleDefinition)                     }                     €Permissions = €TargetFolder.RoleAssignments.Add(€RoleAssignment.Member,€RoleDefBindings)                     €TargetFolder.Update()                     Invoke-PnPQuery                     Write-host "Copied '€(€RoleAssignment.Member.Title)' with Permissions '€PermissionLevels'"                 }             }         }     }     Catch {         write-host -f Red "Error Copying Folder Permissions!" €_.Exception.Message     } }  #Set Parameters €WebURL = "https://crescent.sharepoint.com/sites/Marketing"  #Server Relative URLs of Source and Target Folders €SourceFolderURL = "/sites/Marketing/Shared Documents/Old" €TargetFolderURL = "/sites/Marketing/Shared Documents/New"  #Call the function to copy Folder permissions  Copy-PnPFolderPermissions -WebURL €WebURL -SourceFolderURL €SourceFolderURL -TargetFolderURL €TargetFolderURL 

Este script se agrega a los permisos existentes de la carpeta de destino de forma predeterminada. Puede pasar un parámetro opcional para -AppendToExisting con «€False» si desea borrar todos los permisos existentes de la carpeta de destino y copiar los permisos de la carpeta de origen.