Búsqueda de sitios web

SharePoint Online: eliminar el permiso del usuario de todos los elementos de la lista mediante PowerShell


Requisito: Eliminar un usuario de todos los permisos de elementos de una lista.

¿Cómo eliminar permisos de usuario de un documento o elemento en SharePoint Online?

Cuando un usuario ya no necesita acceso a los documentos de una biblioteca de documentos, puede ser necesario eliminar sus permisos. Para eliminar los permisos de un usuario de un documento en SharePoint Online, puede seguir estos pasos:

  1. Vaya a su sitio de SharePoint Online y navegue hasta la biblioteca de documentos donde está almacenado el documento.
  2. Haga clic derecho en el documento y seleccione "Administrar acceso" en el menú contextual.
  3. En la ventana emergente "Administrar acceso", haga clic en el pequeño menú desplegable junto al nombre de usuario y elija "Dejar de compartir". Esto eliminará al usuario del documento en particular.

  4. También puede hacer clic en el enlace "Avanzado" en la ventana emergente "Administrar acceso" >> hacer clic en "Dejar de heredar permisos" >> De la lista de usuarios, seleccione el usuario cuyos permisos desea eliminar.
  5. Haga clic en el botón "Eliminar permisos de usuario" para eliminar al usuario.

  6. Confirme la acción haciendo clic en "Aceptar".
  7. Guarde los cambios haciendo clic en el botón "Guardar".

Si sigue estos pasos, puede eliminar los permisos de un usuario de un documento específico en SharePoint Online. Hacer esto manualmente para cada documento puede llevar mucho tiempo, especialmente si hay muchos documentos. Analicemos los pasos para eliminar los permisos de un usuario de todos los documentos en una biblioteca de documentos en SharePoint Online usando PowerShell.

SharePoint Online: eliminar permisos de usuario de todos los elementos mediante PowerShell

Hay varios elementos con permisos únicos en una lista de SharePoint Online a los que tiene acceso un usuario específico. Existe el requisito de eliminar al usuario concreto de todos los elementos de la lista a los que tiene acceso. Aquí está PowerShell para SharePoint Online para eliminar permisos a nivel de elemento:


#Load SharePoint Online 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"

##Variables for Processing
$SiteUrl = "https://crescent.sharepoint.com/sites/marketing"
$ListName= "Migration Documents"
$UserAccount = "i:0#.f|membership|salaudeen@crescent.com"

#Get Credentials to connect
$Cred= Get-Credential
  
#Set up the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) 
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
    
#Get the List
$List = $Context.web.Lists.GetByTitle($ListName)

#Get the User
$User = $Context.Web.EnsureUser($UserAccount) 
$Context.Load($User)
$Context.ExecuteQuery()
 
$Query = New-Object Microsoft.SharePoint.Client.CamlQuery
$Query.ViewXml = "<View Scope='RecursiveAll'><RowLimit>2000</RowLimit></View>"
 
#Batch process list items - to mitigate list threshold issue on larger lists
Do {  
    #Get items from the list in batches
    $ListItems = $List.GetItems($Query)
    $Context.Load($ListItems)
    $Context.ExecuteQuery()
           
    $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition
  
    #Loop through each List item
    ForEach($ListItem in $ListItems)
    {
        $ListItem.Retrieve("HasUniqueRoleAssignments")
        $Context.ExecuteQuery()

        If($ListItem.HasUniqueRoleAssignments -eq $true)
        {
            #Get List Item Permissions
            $Context.Load($ListItem.RoleAssignments)
            $Context.ExecuteQuery()

            Foreach($RoleAssignment in $ListItem.RoleAssignments)
            {
                $Context.Load($RoleAssignment.Member)
                $Context.executeQuery()
                #Is the current user is the user we search for?
                If($RoleAssignment.Member.LoginName -eq $User.LoginName)
                {
                    #Remove User from List Item Permissions
                    $ListItem.RoleAssignments.GetByPrincipal($User).DeleteObject()
                    $Context.ExecuteQuery()

                    Write-host -ForegroundColor Green ("User Removed from List Item Permissions ID {0} at {1}" -f $ListItem.ID,$ListItem["FileRef"])
                }
            }
        }
    }
    $Context.ExecuteQuery()
} While ($Query.ListItemCollectionPosition -ne $null) 

Este script de PowerShell elimina al usuario de todos los elementos a los que tiene acceso.

PnP PowerShell para eliminar usuarios de todos los archivos y carpetas de una biblioteca de documentos

Esta vez, eliminemos a un usuario de todos los archivos y carpetas donde tenga permiso con la ayuda de PnP PowerShell.


#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/Marketing"
$ListName="Branding"
$UserAccount = "i:0#.f|membership|steve@Crescent.com"

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive
    
    #Get the User
    $User = Get-PnPUser -Identity $UserAccount -ErrorAction Stop

    #Get all list items
    $ListItems =  Get-PnPListItem -List $ListName -PageSize 500 -Fields ID
    $ItemCount = $ListItems.Count

    #Iterate through each list item
    $Counter=1
    ForEach($ListItem in $ListItems)
    {
        #Display a progress bar
        Write-Progress -PercentComplete ($Counter / $ItemCount * 100) -Activity "Processing Items from List:" -Status "Checking Item '$($ListItem.FieldValues.FileRef)' ($Counter of $ItemCount)"

        #Check if the Item has unique permissions
        $HasUniquePermissions = Get-PnPProperty -ClientObject $ListItem -Property "HasUniqueRoleAssignments"
        If($HasUniquePermissions)
        { 
            #Get Permissions Assigned to the Item
            $RoleAssignments = Get-PnPProperty -ClientObject $ListItem -Property RoleAssignments
 
            #Remove user from Item permissions - If Found!
            [Bool]$UserFound = $false
            ForEach($RoleAssignment in $RoleAssignments)
            {
                $Member =  Get-PnPProperty -ClientObject $RoleAssignment -Property Member
                If($Member.LoginName -eq $User.LoginName)
                {
                    $UserFound = $True
                    $ListItem.RoleAssignments.GetByPrincipal($User).DeleteObject()
                    Invoke-PnPQuery
                }
            }
            If($UserFound) { Write-host -f Green "Removed user from $($Listitem.FileSystemObjectType) at '$($ListItem.FieldValues.FileRef)' Permissions!" }
        }
        $Counter++
    }
}
Catch {
    write-host -f Red "Error Removing user from List Items:" $_.Exception.Message
}

Este script se conecta al sitio de SharePoint Online. Luego, recupera la lista o biblioteca de documentos especificada y todos sus elementos. Para cada elemento con permisos únicos, el script comprueba si el usuario tiene permiso. En caso afirmativo, el script elimina el permiso del usuario sobre el elemento. Al utilizar el script de PowerShell de esta guía, puede eliminar los permisos de un usuario de todos los documentos en una biblioteca de documentos de SharePoint Online. Esta puede ser una herramienta útil para revocar el acceso de un usuario que ya no lo necesita o cuando desea realizar cambios en los permisos de varios documentos a la vez.

Artículos relacionados