Búsqueda de sitios web

SharePoint Online: obtenga todos los archivos de una carpeta usando PowerShell


Requisito: SharePoint Online PowerShell para enumerar archivos en una carpeta.

PowerShell para obtener archivos de una carpeta en SharePoint Online

¿Alguna vez ha necesitado obtener todos los archivos de una carpeta en SharePoint Online? Tal vez esté migrando archivos a una ubicación diferente y necesite tomar todo de la carpeta. Quizás desee una forma rápida de obtener todos los archivos de una carpeta determinada sin tener que navegar por cada uno de ellos. Cualquiera que sea el motivo, ¡PowerShell puede ayudarle! Esta publicación de blog le mostrará cómo usar PowerShell para obtener todos los archivos de una carpeta determinada en SharePoint Online.

Desde el navegador web, utilice el botón "Exportar a Excel" en la barra de herramientas para obtener una lista de todos los archivos y carpetas (¡de las subcarpetas de forma recursiva!).

Usando PowerShell, recuperemos todos los archivos de una carpeta en la 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"

Function Get-FilesFromFolder()
{
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $FolderURL
    )
    Try {
        #Setup Credentials to connect
        $Cred = Get-Credential
        $Cred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.UserName,$Cred.Password)
    
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Cred

        #Get the Folder and Files
        $Folder=$Ctx.Web.GetFolderByServerRelativeUrl($FolderURL)
        $Ctx.Load($Folder)
        $Ctx.Load($Folder.Files)
        $Ctx.ExecuteQuery()

        #Iterate through each File in the folder
        Foreach($File in $Folder.Files)
        {
            #Get Name for each File
            Write-Host $File.Name
        }
    }
    Catch {
        write-host -f Red "Error Getting Files from Folder!" $_.Exception.Message
    }
}

#Set Parameter Values
$SiteURL="https://crescent.sharepoint.com/sites/marketing"
$FolderURL="/Branding/Classified/Finance Department Files"

#Call the function to get list items from folder
Get-FilesFromFolder -SiteURL $SiteURL -FolderURL $FolderURL

PnP PowerShell para obtener todos los archivos de una carpeta en SharePoint Online

Para obtener todos los archivos de una carpeta de forma recursiva, podemos usar este cmdlet de PowerShell Get-PnPFolderItem:


#Config Variables
$SiteURL = "https://Crescent.sharepoint.com"
$FolderSiteRelativeUrl = "/Shared Documents/2017" #Folder's Site Relative Path
 
#Get Credentials to connect
$Cred = Get-Credential
 
Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Credentials $Cred
 
    #Get All Files from the Folder
    $FolderItems = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderSiteRelativeUrl -ItemType File -Recursive
    
    Write-host "Total Number of Files in the Folder:" $FolderItems.Count
    ForEach($File in $FolderItems)
    {
        $File.Name
    }
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Este PowerShell de SharePoint Online obtiene todos los archivos de la carpeta. Aunque el script anterior funciona bien para bibliotecas de documentos con <5000 elementos, en bibliotecas de documentos más grandes, el cmdlet PnP PowerShell Get-PnPFolderItem genera un error:

Get-PnPFolderItem: el intento de operación está prohibido porque excede el umbral de vista de lista”.

Entonces, para mitigar ese problema, podemos reemplazarlo con el cmdlet Get-PnPListItem.


#Config Variables
$SiteURL = "https://Crescent.sharepoint.com/sites/Marketing"
$ListName ="Branding"
$FolderServerRelativePath = "/sites/Marketing/Branding*" #Any file under the given path
  
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
 
#Get all files from folder
Get-PnPListItem -List $ListName -PageSize 2000 | Where {$_.FieldValues.FileRef -like $FolderServerRelativePath -and $_.FileSystemObjectType -eq "File" } | ForEach-Object {
   Write-host $_.FieldValues.FileRef
}

Aquí hay otro PowerShell para obtener todos los elementos de una carpeta de SharePoint Online: SharePoint Online: Obtener todos los elementos de una carpeta

Preguntas frecuentes:

¿Cómo obtengo una lista de todos los archivos de la biblioteca de SharePoint?

Puede obtener una lista de todos los archivos de la biblioteca de SharePoint de diferentes maneras. Una opción es utilizar la función "Exportar a CSV" de la barra de herramientas, que devolverá una lista de todos los archivos de la biblioteca de SharePoint y sus ubicaciones en su servidor. Otro método es usar el script de PowerShell para recuperar una lista de todos los archivos y carpetas en una biblioteca de documentos de SharePoint Online.
Más información: Obtenga todos los archivos en la biblioteca de documentos de SharePoint Online usando PowerShell

¿Cómo descargar una biblioteca de documentos desde SharePoint Online?

La forma más sencilla de descargar una biblioteca de documentos es: navegue a su biblioteca de documentos de SharePoint, seleccione todos los archivos y carpetas y haga clic en el botón "Descargar" de la barra de herramientas. Esto le proporciona un archivo Zip con todos los archivos y carpetas de la biblioteca de documentos.
También puede usar: PowerShell para descargar una biblioteca de documentos desde SharePoint Online

Artículos relacionados