SharePoint Online: migre una carpeta con subcarpetas y archivos usando PowerShell
Requisito: Migrar una carpeta con sus subcarpetas y archivos desde el disco local a SharePoint Online usando PowerShell.
PowerShell para copiar una carpeta con sus subcarpetas y archivos a SharePoint Online:
Migrar una carpeta (y todas sus subcarpetas y archivos) desde su computadora local a SharePoint Online puede ser una tarea desalentadora. Afortunadamente, PowerShell puede ayudar a que este proceso sea rápido y sencillo. Este artículo le mostrará cómo copiar una carpeta con subcarpetas y archivos a SharePoint Online usando PowerShell.
Aquí está PnP PowerShell para copiar todos los archivos y subcarpetas de una carpeta determinada desde una unidad local (o unidad de red) a SharePoint Online:
#Function to Copy Multiple Files with Folder structure to SharePoint Online Document Library
Function Migrate-PnPFolderToSPO()
{
param
(
[Parameter(Mandatory=$true)] [string] $SiteURL,
[Parameter(Mandatory=$true)] [string] $SourceFolderPath,
[Parameter(Mandatory=$true)] [string] $LibraryName,
[Parameter(Mandatory=$true)] [string] $LogFile
)
Try {
Add-content $Logfile -value "`n---------------------- File Upload Script Started: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-------------------"
#Connect to PnP Online
Connect-PnPOnline -Url $SiteURL -Interactive
#Get the Target Folder to Upload
$Web = Get-PnPWeb
$List = Get-PnPList $LibraryName -Includes RootFolder
$TargetFolder = $List.RootFolder
$TargetFolderSiteRelativeURL = $TargetFolder.ServerRelativeURL.Replace($Web.ServerRelativeUrl,[string]::Empty)
#Get All Items from the Source
$Source = Get-ChildItem -Path $SourceFolderPath -Recurse
$SourceItems = $Source | Select FullName, PSIsContainer, @{Label='TargetItemURL';Expression={$_.FullName.Replace($SourceFolderPath,$TargetFolderSiteRelativeURL).Replace("\","/")}}
Add-content $Logfile -value "Number of Items Found in the Source: $($SourceItems.Count)"
#Upload Source Items from Fileshare to Target SharePoint Online document library
$Counter = 1
$SourceItems | ForEach-Object {
#Calculate Target Folder URL
$TargetFolderURL = (Split-Path $_.TargetItemURL -Parent).Replace("\","/")
$ItemName = Split-Path $_.FullName -leaf
#Replace Invalid Characters
$ItemName = [RegEx]::Replace($ItemName, "[{0}]" -f ([RegEx]::Escape([String]'\*:<>?/\|')), '_')
#Display Progress bar
$Status = "uploading '" + $ItemName + "' to " + $TargetFolderURL +" ($($Counter) of $($SourceItems.Count))"
Write-Progress -Activity "Uploading ..." -Status $Status -PercentComplete (($Counter / $SourceItems.Count) * 100)
If($_.PSIsContainer)
{
#Ensure Folder
$Folder = Resolve-PnPFolder -SiteRelativePath ($TargetFolderURL+"/"+$ItemName)
Write-host "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
Add-content $Logfile -value "Ensured Folder '$($ItemName)' to Folder $TargetFolderURL"
}
Else
{
#Upload File
If($TargetFolderURL.StartsWith("/")) {$TargetFolderURL = $TargetFolderURL.Remove(0,1) }
$File = Add-PnPFile -Path $_.FullName -Folder $TargetFolderURL
Write-host "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"
Add-content $Logfile -value "Uploaded File '$($_.FullName)' to Folder $TargetFolderURL"
}
$Counter++
}
}
Catch {
Write-host -f Red "Error:" $_.Exception.Message
Add-content $Logfile -value "Error:$($_.Exception.Message)"
}
Finally {
Add-content $Logfile -value "---------------------- File upload Script Completed: $(Get-date -format 'dd/MM/yyy hh:mm:ss tt')-----------------"
}
}
#Call the Function to Upload a Folder to SharePoint Online
Migrate-PnPFolderToSPO -SiteURL "https://crescent.sharepoint.com/sites/marketing" -SourceFolderPath "C:\Documents" -LibraryName "Migration" -LogFile "C:\Temp\Migration-LOG.log"
Este script copia el contenido de una carpeta en la biblioteca de documentos de SharePoint Online. Sobrescribe cualquier archivo existente en la biblioteca de SharePoint Online de destino y crea una carpeta si no existe en el sitio de destino. ¡También podemos usar este script para migrar archivos y carpetas desde un recurso compartido de archivos de red a la biblioteca de documentos de SharePoint Online!
En resumen, usar PowerShell para migrar una carpeta local con subcarpetas y archivos a SharePoint Online proporciona una solución poderosa y eficiente para transferir datos desde un sistema local a la nube. Este método no sólo preserva la estructura de la carpeta y su contenido, sino que también permite la automatización del proceso de migración, lo que hace que a las organizaciones les resulte rápido y sencillo mover sus datos a la nube.
