Sommaire
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
- Créer une application Azure
- Ajouter des permissions vers SharePoint
- générer un certificat sur un poste
- Importer le certificat dans l’application Azure
- Installer le module PowerShell.PnP
- Se connecter au site SharePoint
- Uploader le contenu
- Créer une application SharePoint
- Faîtes confiance à l’application
- Ajouter des permissions
- Installer le module PowerShell.PnP
- Se connecter au site SharePoint
- Uploader le contenu
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 $Module_Name -Force -Confirm:$False -ErrorAction SilentlyContinue
}
Else
{
Import-Module $Module_Name -Force -ErrorAction SilentlyContinue
}
Via une application Azure
Création de l’application Azure
- Allez dans le portail Azure
- Allez dans App registrations
- Cliquez sur New registration
- Saisissez un nom
- Laissez par défaut puis cliquez sur Register
- Allez dans Overview
- Gardez en mémoire le Client id
Ajout de permissions
- Allez dans API permissions
- Cliquez sur Add a permission
- Choisissez Sharepoint
- Choisissez Application permissions
- Cochez Sites.FullControl.All
- Cliquez sur Add a permission
- 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
- Allez dans le portail Azure
- Allez dans votre application
- Cliquez sur Certificates & secrets
- Cliquez sur Upload certificate
- Choisissez le fichier CER
- Cliquez sur Add
- Gardez en mémoire le Thumbprint
- Vous pouvez exporter le certificat avec la commande suivante :
- Connectez-vous sur votre site SharePoint
- Ajoutez à l’adresse: /_layouts/15/AppRegNew.aspx
- Dans mon cas, l’adresse sera
https://m365x190443.sharepoint.com/sites/SystandDeploy/_layouts/15/AppRegNew.aspx - Dans Client id cliquez sur Generate
- Dans Client Secret cliquez sur Generate
- Saisissez un titre
- Dans App domain, saisissez localhost
- Dans Redirect URI, saisissez localhost
- Cliquez sur Create
- La confirmation ci-dessous s’affiche :

Ajout de permissions
- Connectez-vous sur votre site SharePoint
- Ajoutez à l’adresse: /_layouts/15/appinv.aspx
- Dans mon cas, l’adresse sera:
https://m365x190443.sharepoint.com/sites/SystandDeploy/_layouts/15/appinv.aspx - Dans App id, saisissez le précédent
- Cliquez sur Lookup
- Dans Permissions, ajoutez le XML suivant :
<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Write" ></AppPermissionRequest>
</AppPermissionRequests>
- Cliquez sur Create
- Cliquez sur Trust it
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>
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 : Chemin 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"