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.