Sommaire
ToggleDans 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
Via une application SharePoint
- 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
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.
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
Via une application SharePoint
- 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
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 : 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"