Uploader des fichiers vers SharePoint/Teams avec PowerShell

Dans cet article, je vais vous montrer comment uploader facilement des fichiers vers SharePoint/Teams avec PowerShell.

Contexte

  • Vous avez un ou des sites SharePoint/Teams
  • Vous souhaitez y uploader du contenu comme des logs

Comment cela fonctionne ?

Nous allons utiliser deux méthodes d’authentification à SharePoint :

  • Via une application Azure
  • Via une application SharePoint

Via une application Azure

  1. Créer une application Azure
  2. Ajouter des permissions vers SharePoint
  3. générer un certificat sur un poste
  4. Importer le certificat dans l’application Azure
  5. Installer le module PowerShell.PnP
  6. Se connecter au site SharePoint
  7. Uploader le contenu

Via une application SharePoint

  1. Créer une application SharePoint
  2. Faîtes confiance à l’application
  3. Ajouter des permissions
  4. Installer le module PowerShell.PnP
  5. Se connecter au site SharePoint
  6. Uploader le contenu

Notre site SharePoint

Dans notre exemple, le site SharePoint est le suivant :


Nous souhaitons uploader des logs dans le dossier Device logs.
Pour uploader du contenu, il faut connaître le chemin du dossier dans SharePoint.


Pour cela, utilisez le code suivant :

Installation du module

Pour interagir avec SharePoint, nous allons installer le module PowerShell.pnp
Ci-dessous comment l’installer :

$Module_Name = "PnP.PowerShell"
If (!(Get-InstalledModule $Module_Name -ErrorAction silentlycontinue))              
    { 
        Install-Module  -Force -Confirm:$False -ErrorAction SilentlyContinue | out-null                                                                                                                                                                                                                     
    } 
Else
    {
        Import-Module $Module_Name -Force -ErrorAction SilentlyContinue                                                   
    }

Via une application Azure

Création de l’application Azure

  1. Allez dans le portail Azure
  2. Allez dans App registrations
  3. Cliquez sur New registration
  4. Saisissez un nom
  5. Laissez par défaut puis cliquez sur Register
  1. Allez dans Overview
  2. Gardez en mémoire le Client id

Ajout de permissions

  1. Allez dans API permissions
  2. Cliquez sur Add a permission
  3. Choisissez Sharepoint
  1. Choisissez Application permissions
  2. Cochez Sites.FullControl.All
  1. Cliquez sur Add a permission
  2. Cliquez sur Grant admin consent

Générer le certificat

Sur votre poste, exécutez le code suivant :

$Cert_Name = "SharePoint_Cert"
New-SelfSignedCertificate -DnsName $Cert_Name -CertStoreLocation Cert:\LocalMachine\My
$MyCert = Get-ChildItem -Path "cert:\LocalMachine\My" | Where-Object {$_.Subject -match $Cert_Name}
$Cert_TB = $MyCert.Thumbprint
Export-Certificate -Cert "Cert:\LocalMachine\My\$Cert_TB" -FilePath C:\$Cert_Name.cer

Importer le certificat

  1. Allez dans le portail Azure
  2. Allez dans votre application
  3. Cliquez sur Certificates & secrets
  1. Cliquez sur Upload certificate
  1. Choisissez le fichier CER
  1. Cliquez sur Add
  2. Gardez en mémoire le Thumbprint
  3. Vous pouvez exporter le certificat avec la commande suivante :

Via une application SharePoint

  1. Connectez-vous sur votre site DSharePoint
  2. Ajoutez à l’adresse: /_layouts/15/AppRegNew.aspx
  3. Dans mon cas, l’adresse sera
    https://m365x190443.sharepoint.com/sites/SystandDeploy/_layouts/15/AppRegNew.aspx
  4. Dans Client id cliquez sur Generate
  5. Dans Client Secret cliquez sur Generate
  6. Saisissez un titre
  7. Dans App domain, saisissez localhost
  8. Dans Redirect URI, saisissez localhost
  1. Cliquez sur Create
  2. La confirmation ci-dessous s’affiche :

Ajout de permissions

  1. Connectez-vous sur votre site DSharePoint
  2. Ajoutez à l’adresse: /_layouts/15/appinv.aspx
  3. Dans mon cas, l’adresse sera:
    https://m365x190443.sharepoint.com/sites/SystandDeploy/_layouts/15/appinv.aspx
  4. Dans App id, saisissez le précédent
  5. Cliquez sur Lookup
  6. Dans Permissions, ajoutez le XML suivant :
<AppPermissionRequests AllowAppOnlyPolicy="true">
   <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" ></AppPermissionRequest>
</AppPermissionRequests>
  1. Cliquez sur Create
  2. Cliquez sur Trust it

PowerShell et Sharepoint

Maintenant que nous avons nos méthodes d’authentification, nous allons voir comment:

  • Se connecter au site SharePoint
  • Lister du contenu
  • Obtenir le chemin d’un dossier
  • Y uploader du contenu

Connexion via l’application Azure

Nous aurons besoin de :

  • L’URL du site Sharepoint
  • Le client ID de l’application Azure
  • Le Thumbprint

Nous utiliserons la commande suivante:

$url = "https://m365x190443.sharepoint.com/sites/systanddeploy"
Connect-PnPOnline -Url $url -ClientId "47bf0ca0-1d8a-xxxx-xxx-xxxx" -Tenant 'tenant.onmicrosoft.com' -Thumbprint <Thumbprint>

Connexion via l’application SharePoint

Nous aurons besoin de :

  • L’URL du site Sharepoint
  • Le client ID de l’application SharePoint
  • Le secret de l’application SharePoint

Nous utiliserons la commande suivante :

Connect-PnPOnline -Url <Sharepoint_Site_URL> -ClientID <App_Client_ID> -ClientSecret <App_Client_Secret>

Obtenir le chemin d’un dossier

Nous voulons maintenant récupérer le chemin d’un dossier dans SharePoint afin d’y uploader du contenu.
Dans notre exemple, le dossier se nomme: Device logs
Ci-dessous la commande pour faire cela:

((Get-PnPListItem -List $List -Fields "Title").FieldValues | where {$_.FileRef -like "*Devices Logs*"}).FileRef

Uploader du contenu

Maintenant que nous avons le chemin du dossier, nous allons y uploader un fichier.
Nous allons uploader un fichir ZIP.

La cmdlet à utiliser est: Add-PnPFile
Nous aurons besoin des paramètres:

  • Path : Cehemin du fichier
  • Folder : Chemin du dossier dans SharePoint

Ci-dessous la cmdlet complète:

Add-PnPFile -Path $File -Folder "/sites/SystandDeploy/Shared Documents/Devices Logs"

A propos de l'auteur

Ingénieur Systèmes travaillant principalement sur ce qui tourne autour du poste de travail (MDT, SCCM, Intune) et l’automatisation avec PowerShell. MVP Microsoft et auteur pour ENI, il publie régulièrement sur son blog et gère différents groupes Facebook, PowerShell et WPF (~4000 membres), Windows Autopilot (~3000 membres).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *