Subir Archivo a Sharepoint Online – TrucosInformaticos

Powershell

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.

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.

  1. Abra PowerShell y ejecute este comando:
    Install-Module 'Pnp.PowerShell'
  2. 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.

  3. 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.
    subir archivos a sharepoint powershell

  4. 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.
    subir powershell a sharepoint
    subir archivos a sharepoint usando powershell

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.
    subir archivo a sharepoint online powershell
  • ¿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.
    copie el archivo de powershell a sharepoint en línea

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

subir a sharepoint powershell

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.

archivo de carga de powershell sharepoint

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.

subir carpeta a sharepoint online powershell

Finalmente, abra la biblioteca de documentos en su navegador y vea los nuevos archivos que cargó.

cargar archivos a sharepoint en línea usando powershell

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.

mover archivo de powershell a sharepoint en línea

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) } 
}

powershell para subir archivos a sharepoint online

Y eso se encarga de la carga de la carpeta principal.

cargar carpeta de powershell a sharepoint

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.

subir archivos a sharepoint online powershell

Una vez completada la carga, puede verificar que la subcarpeta se creó en la biblioteca de documentos.

use powershell para cargar archivos a sharepoint en línea

Y los archivos también se cargaron en la subcarpeta, como se muestra a continuación.

cómo usar powershell para cargar archivos a sharepoint

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!

use powershell para cargar el archivo a sharepoint

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.

5/5 - (60 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *