1.4K
Todos podemos estar de acuerdo en que la carga mediante arrastrar y colocar es una de las mayores ventajas de SharePoint Online. Puede seleccionar varios archivos o carpetas completas y arrastrarlos al directorio de su biblioteca de documentos de SharePoint Online y ver cómo se cargan los elementos. Sin cliente ni herramientas añadidas, solo tú y el navegador.
Pero cuando se trata de trabajos desatendidos y automatización, arrastrar y soltar no es una opción. Por ejemplo, si desea programar la carga de un archivo o una carpeta específicos en la biblioteca de documentos de SPO, deberá hacerlo mediante programación. Por suerte para usted, este artículo le enseñará cómo cargar archivos en SharePoint usando PowerShell.
requisitos previos
Aquí están las cosas que necesitarás.
- Una computadora con Windows PowerShell 5.1 o el último PowerShell 7 instalado. Esta publicación usará PowerShell 7.3.2 en Windows 11.
- Acceso a una biblioteca de documentos de SharePoint Online.
Instale el módulo PnP PowerShell
Primero debe instalar el módulo PnP PowerShell en su computadora. Este módulo proporciona cmdlets que le permiten autenticarse e interactuar con su arrendatario de SharePoint Online.
- Abra PowerShell y ejecute este comando:
Install-Module 'Pnp.PowerShell'
- Verifique que el módulo esté instalado:
Get-Module 'Pnp.PowerShell' -ListAvailable
Como puede ver, la última versión a partir de este escrito es 1.12.0.
- Suponiendo que no se haya conectado a SharePoint mediante el módulo Pnp.PowerShell, primero debe registrar el acceso del shell de administración a Azure AD mediante el siguiente comando:
Register-PnpManagementShellAccess
Aparece una ventana de inicio de sesión interactiva. Inicie sesión con sus credenciales.
- A continuación, se le pedirá que acepte los permisos necesarios de Shell de administración de PnP. Desplácese hasta la parte inferior y haga clic en Aceptar.
Antes de intentar cargar archivos en SharePoint usando PowerShell, preparemos los detalles.
- ¿Cuál es la URL del sitio de SharePoint de destino para la carga?
- En este ejemplo, la URL del sitio de SharePoint de destino es https://.sharepoint.com/sites/VentasyMarketing.
- ¿Cuál es la biblioteca de documentos de destino en relación con la URL del sitio?
- La biblioteca de documentos de destino (carpeta) es DummyDocs.
- ¿Cuál es la ubicación de los archivos para cargar?
- Suponga que tiene uno o más archivos que desea cargar en una biblioteca de documentos de SharePoint. Por ejemplo, tengo diez archivos bajo el ./temperatura carpeta.
Subir archivos a SharePoint usando PowerShell
Ahora que tiene todos los detalles, profundicemos en el proceso de carga.
Abra PowerShell y almacene las siguientes variables.
# What is the target SharePoint site URL for the upload? $spoSite="https://<tenant>.sharepoint.com/sites/SalesandMarketing/" # What is the target document library relative to the site URL? $spoDocLibrary = 'DummyDocs' # What is the location of the files to upload? $localFolder = "./temp"
Ahora, conéctese a la URL del sitio de SharePoint ejecutando este comando. Este comando se autentica en el sitio de SPO que especificó en la variable $spoSite. Ingrese su nombre de usuario y contraseña cuando se le solicite.
Connect-PnPOnline -Url $spoSite
Ejecute este comando para asegurarse de que está conectado al sitio de SPO correcto.
Get-PnPSite
A continuación, confirme que la carpeta de destino que especificó en la variable $spoDocLibrary existe en el sitio de SPO.
Resolve-PnPFolder -SiteRelativePath $spoDocLibrary
El siguiente resultado confirma que la carpeta de destino existe.
Ahora recopilemos los archivos para cargar.
$files = Get-ChildItem $localFolder -File
Una vez que los archivos se cargan en la variable $files, usemos la iteración para cargar cada archivo. Usaremos el ciclo foreach en este ejemplo para cargar cada archivo.
Nota. Consulte nuestra guía sobre cómo Power Automate la supervisión de listas de SharePoint con la notificación de canal de Teams.
Lo que finalmente carga los archivos en el destino es el cmdlet Add-PnPFile.
foreach ($item in $files) { Add-PnPFile ` -Path ($item.FullName.ToString()) ` -Folder $spoDocLibrary ` -Values @{"Title" = $($item.Name) } }
Cada elemento aparece en la pantalla a medida que se cargan en la biblioteca de documentos.
Finalmente, abra la biblioteca de documentos en su navegador y vea los nuevos archivos que cargó.
Subir archivos recursivamente a SharePoint usando PowerShell
En la sección anterior, demostramos cómo cargar archivos en una carpeta. ¿Qué sucede si necesita cargar archivos de forma recursiva y desea mantener la estructura de carpetas?
Por ejemplo, la siguiente captura de pantalla muestra que el ./temperatura carpeta tiene una carpeta secundaria llamada subdir1. Tanto la carpeta principal como la secundaria contienen diez archivos cada una.
El objetivo es cargar estas carpetas y archivos en la biblioteca de documentos de SharePoint, conservando la estructura de subdirectorios.
Usemos la misma información que usamos en la sección anterior. Ejecute el siguiente código en PowerShell, pero asegúrese de reemplazar los valores con los suyos.
# What is the target SharePoint site URL for the upload? $spoSite="https://<tenant>.sharepoint.com/sites/SalesandMarketing/" # What is the target document library relative to the site URL? $spoDocLibrary = 'DummyDocs' # What is the location of the files to upload? $localFolder = "./temp"
Conéctese al sitio de SharePoint Online
Connect-PnPOnline -Url $spoSite -Credentials $spoCredential
Una vez conectado, primero carguemos los archivos en el nivel principal. El siguiente comando es el mismo que ejecutamos en la sección anterior para cargar los archivos desde una carpeta.
$files = Get-ChildItem $localFolder -File foreach ($item in $files) { Add-PnPFile ` -Path ($item.FullName.ToString()) ` -Folder $spoDocLibrary ` -Values @{"Title" = $($item.Name) } }
Y eso se encarga de la carga de la carpeta principal.
Pero, ¿dónde está la subcarpeta? Eso es lo que subiremos a continuación.
Ejecute el siguiente comando para obtener todas las carpetas secundarias en la ubicación $localFolder.
# Get all child folders. $childFolders = Get-ChildItem -Path $localFolder -Directory -Recurse
Ahora, ejecute este comando para cargar los archivos de forma recursiva. No tiene que crear previamente las subcarpetas en la biblioteca de documentos; el cmdlet Add-PnPFile ya lo hace por usted.
# Loop through each child folder foreach ($childFolder in $childFolders) { # Form the target subfolder name (i.e. "DummyDocs/subdir1") $TargetSubFolderName = ` "$($spoDocLibrary)$(($childFolder.FullName ).Replace((Resolve-Path $localFolder).Path," ).Replace('\','/'))" # Get all files in the child folder $files = Get-ChildItem ($childFolder.FullName) -File # Loop through each file under the child folder. foreach ($item in $files) { Add-PnPFile ` -Path ($item.FullName.ToString()) ` -Folder $TargetSubFolderName ` -Values @{"Title" = $($item.Name) } } }
Verá una pantalla similar a la captura de pantalla a continuación durante la carga del archivo.
Una vez completada la carga, puede verificar que la subcarpeta se creó en la biblioteca de documentos.
Y los archivos también se cargaron en la subcarpeta, como se muestra a continuación.
Poniendo todo junto en un guión
Hasta ahora, hemos demostrado los pasos para cargar archivos y carpetas para que pueda comprender cómo funciona el proceso (con suerte). Lo que es aún mejor es convertir todo este proceso en un guión.
Primero, guarde el código a continuación como Inicio-CarpetaUpload.ps1 en tu ordenador.
Nota. También puede descargar el script desde este GitHub esencia.
[CmdletBinding()] param ( [Parameter(Mandatory)] [pscredential] $Credentials, [Parameter(Mandatory)] [string] $SiteUrl, [Parameter(Mandatory)] [string] $LocalFolderPath, [Parameter(Mandatory)] [string] $TargetFolderName, [Parameter()] [Switch] $Recursive ) # Ensure that the LocalFolderPath exists. Exit if not. if (!$(Test-Path $LocalFolderPath)) { "The LocalFolderPath does not exist." | Out-Default return $null } else { $LocalFolderPath = $(Resolve-Path $LocalFolderPath) } # Connect to the SPO site. Exit if failed. try { Connect-PnPOnline -Url $SiteUrl -Credentials $Credentials -ErrorAction STOP } catch { $_.Exception.Message | Out-Default return $null } # Ensure that the Document Library exists. Exit if not. try { $null = Resolve-PnPFolder -SiteRelativePath $TargetFolderName -ErrorAction Stop } catch { $_.Exception.Message | Out-Default return $null } # Upload the top-level folder files only. $Files = Get-ChildItem -Path $LocalFolderPath -File foreach ($File in $Files) { Add-PnPFile -Path ($File.FullName.ToString()) -Folder $TargetFolderName -Values @{"Title" = $($File.Name) } | Out-Null "Uploaded File: $($File.FullName)" | Out-Default } # If -Recursive, upload the subfolders and files if ($Recursive) { $SubFolders = Get-ChildItem -Path $LocalFolderPath -Directory -Recurse foreach ($SubFolder in $SubFolders) { $SubTargetFolderName = "$($TargetFolderName)$(($SubFolder.FullName).Replace($LocalFolderPath,'').Replace('\','/'))" $Files = Get-ChildItem -Path ($SubFolder.FullName) -File foreach ($File in $Files) { Add-PnPFile -Path ($File.FullName.ToString()) -Folder $SubTargetFolderName -Values @{"Title" = $($File.Name) } | Out-Null "Uploaded File: $($File.FullName)" | Out-Default } } }
Este script tiene cinco parámetros, cuatro de los cuales son obligatorios.
- -Cartas credenciales — Este parámetro acepta su objeto de credencial de SharePoint Online.
- -Sitio URL — La URL del sitio de SharePoint Online.
- -LocalFolderPath — La ubicación en su computadora local que contiene los archivos para cargar.
- -Nombre de la carpeta de destino — La carpeta de destino o el nombre de la biblioteca de documentos.
- -Recursivo — El parámetro switch permite que se carguen los archivos y carpetas recursivos. Solo se cargarán los archivos en el nivel de la carpeta principal si no se especifica.
Pongamos el guión a prueba.
$credentials = Get-Credential .\Start-FolderUpload.ps1 ` -Credentials $credentials ` -SiteUrl 'https://<tenant>.sharepoint.com/sites/sitename' ` -TargetFolderName' DummyDocs'` -LocalFolderPath' ./temp'` -Recursive
¡Y mira la magia mientras sucede!
Conclusión
La interacción de PowerShell y SharePoint Online a través del módulo PnP es una excelente manera de automatizar múltiples tareas. Aprendió en esta publicación cómo comenzar a cargar archivos y carpetas desde una ubicación local a una biblioteca de documentos de SharePoint Online.
Además, proporcionamos un script de trabajo que puede usar para cargar archivos en SharePoint usando PowerShell. Opcionalmente, la secuencia de comandos le permite especificar si desea cargar archivos de forma recursiva mientras mantiene la estructura de subcarpetas, lo que le brinda un control adicional.
Finalmente, una cosa para recordar es que el cmdlet Add-PnPFile no le dice si el archivo con el mismo nombre ya existe en la biblioteca de destino. Si el control de versiones está habilitado en esa biblioteca de documentos, se creará una nueva versión de ese archivo. Por el contrario, si el control de versiones está deshabilitado, el archivo se sobrescribirá sin previo aviso.