Búsqueda de sitios web

SharePoint Online: obtenga elementos de lista de listas grandes (>5000 elementos) usando PowerShell sin error de umbral de vista de lista excedido


Problema: Cuando intenta obtener elementos de listas más grandes con más de 5000 elementos a través de PowerShell, obtiene el problema de que se superó el umbral de vista de lista en SharePoint Online.

Un script CSOM de PowerShell típico para obtener elementos de una lista generó un error:
“Excepción al llamar a “ExecuteQuery” con argumento(s) “0”: “El intento de operación está prohibido porque excede el umbral de vista de lista impuesto por el administrador”.

Causa principal: ¡Umbral de visualización de lista de 5000 elementos en SharePoint Online!

Como dice el mensaje de error, tenemos 5000 como límite estricto para el umbral de vista de lista en SharePoint Online. Cualquier intento de realizar operaciones masivas, como leer/escribir más de 5000 elementos en SharePoint Online, genera este problema. A diferencia de SharePoint local, desafortunadamente, este límite no se puede aumentar. Entonces, veamos cómo usar CAML para consultar listas grandes en SharePoint Online.

¿Cómo obtener elementos de una lista grande usando PowerShell sin que se haya superado el umbral de vista de lista?

¿Cómo superar el umbral de vista de lista en SharePoint Online? Existen varias soluciones para abordar este problema. Aquí está el mío: ¡Obtenga elementos de la lista por lotes!

PowerShell para obtener elementos de lista de listas grandes:

A continuación se explica cómo obtener más de 5000 registros usando PowerShell en la lista de SharePoint Online sin que se supere el umbral de vista de lista.


#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"

#Config Parameters
$SiteURL="https://Crescent.SharePoint.com"
$ListName="Projects"
$BatchSize= 2000

Try {
    $Cred= Get-Credential
    $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

    #Setup the context
    $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Ctx.Credentials = $Credentials
        
    #Get the List
    $List = $Ctx.Web.Lists.GetByTitle($ListName)
    $Ctx.Load($List)
    $Ctx.ExecuteQuery()

    #Define Query to get List Items in batch
    $Query = New-Object Microsoft.SharePoint.Client.CamlQuery
    $Query.ViewXml = "<View Scope='RecursiveAll'><RowLimit>$BatchSize</RowLimit></View>"

    #Get List Items in Batch
    Do 
    {
        $ListItems = $List.GetItems($Query)
        $Ctx.Load($ListItems)
        $Ctx.ExecuteQuery()
        $ListItems.count
        $Query.ListItemCollectionPosition = $ListItems.ListItemCollectionPosition
    }
    While($Query.ListItemCollectionPosition -ne $null)

}
Catch {
    write-host -f Red "Error Getting List Items:" $_.Exception.Message
} 

¡Solo asegúrese de que su lote sea inferior a 5000 para evitar el problema del umbral límite de 5000 en SharePoint Online!

Obtener elementos de lista de listas más grandes usando PnP PowerShell

El módulo PnP PowerShell proporciona un modificador "PageSize" para manejar listas más grandes en lotes:


#Parameter
$SiteURL = "https://crescent.sharepoint.com/sites/PMO"
$ListName= "Projects"
 
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive

#Get all list items from list in batches
$ListItems = Get-PnPListItem -List $ListName -PageSize 500

Write-host "Total Number of List Items:" $($ListItems.Count)

#Loop through each Item
ForEach($Item in $ListItems)
{  
    Write-Host "Id :" $Item["ID"] 
    Write-Host "Title :" $Item["Title"]
}

Artículos relacionados