SharePoint Online: descargue todos los archivos de una biblioteca de documentos usando PowerShell
Requisito: PowerShell para descargar todos los archivos de una biblioteca de documentos de SharePoint Online.
¿Cómo descargar una biblioteca de documentos en SharePoint Online?
Las bibliotecas de documentos son un componente central de SharePoint Online y brindan a los usuarios una ubicación central para almacenar, organizar y acceder a archivos. Sin embargo, puede haber ocasiones en las que los usuarios necesiten descargar todo el contenido de una biblioteca de documentos para realizar copias de seguridad, migraciones u otros fines. Si necesita descargar una biblioteca de documentos en SharePoint Online, existen diferentes formas de hacerlo. En esta publicación de blog, le mostraré cómo descargar todos los archivos de una biblioteca de SharePoint Online usando el navegador web, el explorador de archivos y PowerShell. Esto puede resultar útil si necesita reunir todos los archivos de una biblioteca para archivarlos u otro fin. ¡Empecemos!
Descargar varios archivos a la vez desde SharePoint Online es tan fácil como copiar archivos con el Explorador de archivos (abra la biblioteca en el Explorador de archivos, copie y pegue la carpeta de la biblioteca de documentos en su disco local). Para descargar todos los archivos de una biblioteca de documentos de SharePoint Online con el navegador web, siga estos pasos:
- Navegue a su biblioteca de documentos de SharePoint >> Seleccione todos los archivos y carpetas.
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. Del mismo modo, también puedes descargar carpetas.
Tenga en cuenta que esta característica solo está disponible con la interfaz de usuario moderna de SharePoint Online y estos métodos no descargan ningún metadato del documento. Necesita al menos el nivel de permiso Sólo ver para descargar documentos desde SharePoint. Además, vale la pena mencionar que si ciertos tipos de archivos, como los archivos PDF, están protegidos por Information Rights Management (IRM), es posible que no pueda descargar documentos.
Está bien. Descarguemos documentos de la biblioteca de documentos de SharePoint Online usando PowerShell.
¡También puede usar el cliente de sincronización OneDrive para descargar una biblioteca de documentos a su máquina local! Simplemente vaya a la biblioteca de documentos o carpeta que desea descargar >> ¡Haga clic en el botón de sincronización en la barra de herramientas y siga el asistente!
SharePoint Online: descargar todos los archivos de una biblioteca usando PowerShell CSOM
Podemos usar PowerShell para descargar una biblioteca de documentos en SharePoint Online. ¿Pero por qué PowerShell? ¡Quizás porque la vista del Explorador no funcionó o porque deseas automatizar el proceso! Aquí está el PowerShell de SharePoint Online para descargar la biblioteca de documentos:
#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 Download-FilesFromLibrary()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $LibraryName,
[Parameter(Mandatory=$true)] [string] $TargetFolder
)
Try {
#Setup Credentials to connect
$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 all files from the Library
$List = $Ctx.Web.Lists.GetByTitle($LibraryName)
$Ctx.Load($List)
$Ctx.ExecuteQuery()
#Get Files from the Folder
$Folder = $List.RootFolder
$FilesColl = $Folder.Files
$Ctx.Load($FilesColl)
$Ctx.ExecuteQuery()
Foreach($File in $FilesColl)
{
$TargetFile = $TargetFolder+$File.Name
#Download the file
$FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
$WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
$FileInfo.Stream.CopyTo($WriteStream)
$WriteStream.Close()
}
Write-host -f Green "All Files from Library '$LibraryName' Downloaded to Folder '$TargetFolder' Successfully!" $_.Exception.Message
}
Catch {
write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
}
}
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/sales/"
$LibraryName="Documents"
$TargetFolder="C:\Documents\"
#Call the function to download file
Download-FilesFromLibrary -SiteURL $SiteURL -LibraryName $LibraryName -TargetFolder $TargetFolder
Este script de PowerShell descarga todos los archivos de la biblioteca. ¿Qué pasa si su biblioteca tiene subcarpetas? Bueno, cambiemos PowerShell para descargar una biblioteca de SharePoint Online.
Descargar todos los archivos, incluidas las subcarpetas, de la biblioteca mediante PowerShell:
Descarguemos archivos de la biblioteca de documentos de SharePoint Online usando PowerShell, incluidos todos los archivos de todas las subcarpetas.
#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 Download-AllFilesFromLibrary()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [Microsoft.SharePoint.Client.Folder] $SourceFolder,
[Parameter(Mandatory=$true)] [string] $TargetFolder
)
Try {
#Create Local Folder, if it doesn't exist
$FolderName = ($SourceFolder.ServerRelativeURL) -replace "/","\"
$LocalFolder = $TargetFolder + $FolderName
If (!(Test-Path -Path $LocalFolder)) {
New-Item -ItemType Directory -Path $LocalFolder | Out-Null
}
#Get all Files from the folder
$FilesColl = $SourceFolder.Files
$Ctx.Load($FilesColl)
$Ctx.ExecuteQuery()
#Iterate through each file and download
Foreach($File in $FilesColl)
{
$TargetFile = $LocalFolder+"\"+$File.Name
#Download the file
$FileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($Ctx,$File.ServerRelativeURL)
$WriteStream = [System.IO.File]::Open($TargetFile,[System.IO.FileMode]::Create)
$FileInfo.Stream.CopyTo($WriteStream)
$WriteStream.Close()
write-host -f Green "Downloaded File:"$TargetFile
}
#Process Sub Folders
$SubFolders = $SourceFolder.Folders
$Ctx.Load($SubFolders)
$Ctx.ExecuteQuery()
Foreach($Folder in $SubFolders)
{
If($Folder.Name -ne "Forms")
{
#Call the function recursively
Download-AllFilesFromLibrary -SiteURL $SiteURL -SourceFolder $Folder -TargetFolder $TargetFolder
}
}
}
Catch {
write-host -f Red "Error Downloading Files from Library!" $_.Exception.Message
}
}
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/sales/"
$LibraryName="Documents"
$TargetFolder="C:\Docs"
#Setup Credentials to connect
$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 Library
$List = $Ctx.Web.Lists.GetByTitle($LibraryName)
$Ctx.Load($List)
$Ctx.Load($List.RootFolder)
$Ctx.ExecuteQuery()
#Call the function: sharepoint online download multiple files powershell
Download-AllFilesFromLibrary -SiteURL $SiteURL -SourceFolder $List.RootFolder -TargetFolder $TargetFolder
PnP PowerShell para descargar una biblioteca de documentos desde SharePoint Online
Este script de PowerShell descarga todos los archivos y carpetas de la biblioteca de documentos al directorio local.
#Function to Download All Files from a SharePoint Online Folder - Recursively
Function Download-SPOFolder([Microsoft.SharePoint.Client.Folder]$Folder, $DestinationFolder)
{
#Get the Folder's Site Relative URL
$FolderURL = $Folder.ServerRelativeUrl.Substring($Folder.Context.Web.ServerRelativeUrl.Length)
$LocalFolder = $DestinationFolder + ($FolderURL -replace "/","\")
#Create Local Folder, if it doesn't exist
If (!(Test-Path -Path $LocalFolder)) {
New-Item -ItemType Directory -Path $LocalFolder | Out-Null
Write-host -f Yellow "Created a New Folder '$LocalFolder'"
}
#Get all Files from the folder
$FilesColl = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType File
#Iterate through each file and download
Foreach($File in $FilesColl)
{
Get-PnPFile -ServerRelativeUrl $File.ServerRelativeUrl -Path $LocalFolder -FileName $File.Name -AsFile -force
Write-host -f Green "`tDownloaded File from '$($File.ServerRelativeUrl)'"
}
#Get Subfolders of the Folder and call the function recursively
$SubFolders = Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType Folder
Foreach ($Folder in $SubFolders | Where {$_.Name -ne "Forms"})
{
Download-SPOFolder $Folder $DestinationFolder
}
}
#Set Parameters
$SiteURL = "https://crescent.sharepoint.com"
$LibraryURL = "/Shared Documents" #Site Relative URL
$DownloadPath ="C:\Temp\Docs\"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Credentials (Get-Credential)
#Get The Root folder of the Library
$Folder = Get-PnPFolder -Url $LibraryURL
#Call the function to download the document library
Download-SPOFolder $Folder $DownloadPath
PnP PowerShell para descargar una biblioteca de documentos más grande
Como el cmdlet Get-PnPFolderItem no puede manejar bibliotecas con más de 5000 elementos a partir de hoy y termina con el mensaje "El intento de operación está prohibido porque excede el umbral de vista de lista". error: este es el método alternativo para descargar todos los archivos y carpetas de una biblioteca de documentos más grande.
#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"
$ListName = "Branding"
$DownloadPath ="C:\Temp\NewDocs"
#Connect to SharePoint Online
Connect-PnPOnline $SiteURL -Interactive
$Web = Get-PnPWeb
#Get the list
$List = Get-PnPList -Identity $ListName
#Get all Items from the Library - with progress bar
$global:counter = 0
$ListItems = Get-PnPListItem -List $ListName -PageSize 500 -Fields ID -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete `
($global:Counter / ($List.ItemCount) * 100) -Activity "Getting Items from List:" -Status "Processing Items $global:Counter to $($List.ItemCount)";}
Write-Progress -Activity "Completed Retrieving Folders from List $ListName" -Completed
#Get all Subfolders of the library
$SubFolders = $ListItems | Where {$_.FileSystemObjectType -eq "Folder" -and $_.FieldValues.FileLeafRef -ne "Forms"}
$SubFolders | ForEach-Object {
#Ensure All Folders in the Local Path
$LocalFolder = $DownloadPath + ($_.FieldValues.FileRef.Substring($Web.ServerRelativeUrl.Length)) -replace "/","\"
#Create Local Folder, if it doesn't exist
If (!(Test-Path -Path $LocalFolder)) {
New-Item -ItemType Directory -Path $LocalFolder | Out-Null
}
Write-host -f Yellow "Ensured Folder '$LocalFolder'"
}
#Get all Files from the folder
$FilesColl = $ListItems | Where {$_.FileSystemObjectType -eq "File"}
#Iterate through each file and download
$FilesColl | ForEach-Object {
$FileDownloadPath = ($DownloadPath + ($_.FieldValues.FileRef.Substring($Web.ServerRelativeUrl.Length)) -replace "/","\").Replace($_.FieldValues.FileLeafRef,'')
Get-PnPFile -ServerRelativeUrl $_.FieldValues.FileRef -Path $FileDownloadPath -FileName $_.FieldValues.FileLeafRef -AsFile -force
Write-host -f Green "Downloaded File from '$($_.FieldValues.FileRef)'"
}
Método alternativo para descargar una biblioteca de documentos desde SharePoint Online
Para copiar archivos de SharePoint en línea a una carpeta local, use este script de PowerShell:
#Set Parameters
$TenantSiteURL = "https://crescent.sharepoint.com"
$SiteRelativeURL = "/sites/marketing"
$LibraryName = "Project Documents"
$DownloadPath ="C:\Temp\Docs"
#Connect to PnP Online as Virtual Drive "SPO:\"
Connect-PnPOnline -Url $TenantSiteURL -CreateDrive -Credentials (Get-Credential)
#Change the Path and navigate to the source site
Set-Location -Path SPO:\$SiteRelativeURL
#Download Document Library to Local Drive
Copy-PnpItemProxy -Recurse -Force $LibraryName $DownloadPath
Conclusión
En conclusión, descargar una biblioteca de documentos de SharePoint Online es un proceso sencillo que se puede realizar mediante diversos métodos. Si es un profesional experimentado de SharePoint o un usuario novato, puede elegir la interfaz nativa del navegador web de SharePoint, la vista Explorer o un script de PowerShell. Si sigue los pasos descritos en esta guía, podrá descargar fácilmente una biblioteca de documentos desde SharePoint Online. Esto asegurará que sus archivos importantes estén respaldados y accesibles cuando los necesite.
¿Puedo descargar todos los archivos de todas las bibliotecas de un sitio? Claro, puede recorrer todas las bibliotecas de documentos y llamar a la función o usar este método: ¿Cómo descargar todos los archivos del sitio de SharePoint Online usando PowerShell?
Preguntas frecuentes:
¿Cómo descargo todos los archivos adjuntos de una lista de SharePoint Online?
Utilice las funciones "Map Network Drive" o "File Explorer" para descargar archivos adjuntos de la lista de SharePoint. También puede usar PowerShell para descargar todos los archivos adjuntos de las listas de SharePoint Online.
Más información: Descargar archivos adjuntos de la lista de SharePoint Online
¿Cómo evitar la descarga en la biblioteca de documentos de SharePoint?
Otorgue a los usuarios permisos de "Vista restringida" para bloquear la opción de descarga desde la biblioteca de documentos de SharePoint Online.
Más información: Bloquear la opción de descarga de documentos en SharePoint Online
¿Cómo copio una biblioteca de un sitio de SharePoint a otro?
Puede utilizar la función "Copiar a" en SharePoint Online para copiar todos los archivos de una biblioteca de documentos a otra. PowerShell también se puede utilizar para copiar una biblioteca entre sitios de SharePoint Online.
Más información: Copiar biblioteca de documentos de SharePoint Online a otro sitio
¿Cómo copio una biblioteca de documentos en SharePoint Online?
Puede guardar la biblioteca de documentos de origen como una plantilla y crear una nueva biblioteca de documentos a partir de la plantilla guardada para hacer una copia de una biblioteca de documentos. Y luego copie todos los archivos y carpetas del origen a la biblioteca de destino si es necesario. Los scripts de PowerShell pueden ayudarle a automatizar estas tareas.
Más información: SharePoint Online Copiar una biblioteca de documentos
¿Cómo descargo una carpeta de SharePoint Online?
Para descargar una carpeta de SharePoint Online, navegue hasta la carpeta que desea descargar y haga clic en el botón "Descargar" en la barra de herramientas. Esto descargará la carpeta completa y su contenido como un archivo ZIP comprimido. Luego puede extraer los archivos del archivo ZIP en su computadora local. ¡También es posible descargar una carpeta de SharePoint Online con PowerShell! ¿Cómo descargar una carpeta de SharePoint Online?
