Búsqueda de sitios web

SharePoint Online: conceder permiso a cada carpeta de una biblioteca de documentos mediante PowerShell


Requisito: Conceder permiso a todas las subcarpetas de una biblioteca de documentos de SharePoint Online.

¿Cómo conceder permiso a todas las carpetas de una biblioteca de documentos?

Cuando agrega un usuario a una biblioteca de documentos en SharePoint Online, el usuario obtiene permiso para acceder a todas las carpetas que heredan permisos. ¿Qué tal las carpetas con permisos únicos? Al otorgar permisos, asegúrese de seleccionar la casilla de verificación "Compartir todo en esta carpeta, incluso los elementos con permisos únicos".

Para otorgar permiso a todas las carpetas de una biblioteca de documentos en SharePoint Online, puede seguir los siguientes pasos:

  1. Navegue hasta la biblioteca de documentos donde desea otorgar permisos a todas las carpetas.
  2. Haga clic en el ícono de ajustes en la esquina superior derecha y luego seleccione "Configuración de la biblioteca de documentos".
  3. En la sección “Permisos y administración”, haga clic en “Permisos para esta biblioteca de documentos”.
  4. Haga clic en el botón "Otorgar permisos" en la cinta.
  5. Ingrese las direcciones de correo electrónico o los nombres de las personas o grupos a los que desea otorgar permisos y luego seleccione el nivel de permisos que desea otorgar (por ejemplo, Leer, Contribuir, etc.).
  6. Configure "Compartir todo en esta carpeta, incluso los elementos con permisos únicos". Haga clic en el botón "Compartir" para otorgar los permisos.

  7. Esto otorgará permisos a todas las carpetas dentro de la biblioteca de documentos.

SharePoint Online: conceder permiso a carpetas mediante PowerShell

Otorgar permisos a todas las carpetas de una biblioteca de SharePoint Online puede ser un proceso tedioso si tiene que hacerlo manualmente para cada carpeta. En esta publicación de blog, le mostraremos cómo usar PowerShell para otorgar permisos rápidamente a todas las carpetas de su biblioteca de documentos de SharePoint Online.

Aquí está el PowerShell para agregar usuarios a cada carpeta en la lista o biblioteca de documentos de SharePoint Online.


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Set Config Variables
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Documents"
$UserAccount = "Salaudeen@crescent.com"
$PermissionLevel= "Contribute"

#Function to Add User to Folder Permissions
Function Grant-SPOFolderPermission() {
    Param(
        [Microsoft.SharePoint.Client.Folder]$Folder, 
        [String]$UserAccount, 
        [String]$PermissionLevel
        )
    Try {

        #Check if Folder has unique permission already
        $Folder.ListItemAllFields.Retrieve("HasUniqueRoleAssignments")
        $Ctx.ExecuteQuery()

        If($Folder.ListItemAllFields.HasUniqueRoleAssignments -ne $true)
        {
            #Break Folder Permission inheritence - Keep all existing folder permissions & Item level permissions
            $Folder.ListItemAllFields.BreakRoleInheritance($True,$True)
            $Ctx.ExecuteQuery()
            Write-host -f Yellow "`tFolder's Permission inheritance broken..."
        }

        #Get the SharePoint User
        $User = $Ctx.Web.EnsureUser($UserAccount)
        $Ctx.load($User)
        $Ctx.ExecuteQuery()

        #Get the role required
        $Role = $Ctx.web.RoleDefinitions.GetByName($PermissionLevel)
        $RoleDB = New-Object Microsoft.SharePoint.Client.RoleDefinitionBindingCollection($Ctx)
        $RoleDB.Add($Role)
          
        #Assign permissions
        $UserPermissions = $Folder.ListItemAllFields.RoleAssignments.Add($User,$RoleDB)
        $Folder.Update()
        Write-host -f Green "`tAdded User to Folder Permissions!"
    }
    catch {
        write-host "Error in Grant Permissions: $($_.Exception.Message)" -foregroundcolor Red
    }
}

#Get Credentials to connect
$Cred = Get-Credential
  
Try {
    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
 
    #Get the List
    $List = $Ctx.web.Lists.GetByTitle($ListName) 
    
    #Get Sub-Folders of the List
    $SubFolders = $List.RootFolder.Folders
    $Ctx.Load($SubFolders)
    $Ctx.ExecuteQuery()
     
    #Iterate through Each Sub-Folder
    ForEach($Folder in $SubFolders)
    {
        #Exclude "Forms" and Hidden folders
        If(($Folder.Name -ne "Forms") -and (-Not($Folder.Name.StartsWith("_"))))
        {
            #Get the Folder's Server Relative URL
            Write-host -f Yellow "Granting Permissions on Folder:"$Folder.Name
            Grant-SPOFolderPermission -Folder $Folder -UserAccount $UserAccount -PermissionLevel $PermissionLevel
        }
    }
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Este script recorre de forma recursiva cada subcarpeta de la lista o biblioteca determinada y cambia los permisos de la carpeta agregando un usuario determinado con derechos de acceso determinados.

PnP PowerShell para agregar usuarios a todas las carpetas de una biblioteca de documentos:

El cmdlet Set-PnPListItemPermission rompe la herencia de permisos del elemento, si aún no está rota, y agrega o elimina permisos según los parámetros proporcionados.


#Set Variables
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing"
$ListName="Documents"
$ParentFolderURL = "/Shared Documents" #Site Relative Path of the document Library
$UserAccount = "Salaudeen@crescent.com"
 
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)

#Get all Folders from the given location - Exclude Hidden
$AllFolders= Get-PnPFolderItem -ItemType Folder -FolderSiteRelativeUrl $ParentFolderURL | Where {($_.Name -ne "Forms") -and (-Not($_.Name.StartsWith("_")))}

#Iterate through each Folder
ForEach($Folder in $AllFolders)
{
    Write-host ("Granted Permission to '{0}' at {1} " -f $Folder.Name,$Folder.ServerRelativeUrl)
    #Grant Contribute permissions to the Folder
    Set-PnPListItemPermission -List $ListName -Identity $Folder.ListItemAllFields -User $UserAccount -AddRole 'Contribute'
} 

Otorgar permisos a una carpeta en SharePoint Online se explica en otra publicación: ¿Cómo otorgar permisos a una carpeta en SharePoint Online usando PowerShell?

Artículos relacionados