PowerShell avec SharePoint Online

binary design

PowerShell peut vous aider à automatiser les actions administratives comme la gestion des permissions, la création et la configuration du site, des listes, bibliothèques, etc… Dans ce post, vous trouverez des informations sur la façon d’utiliser PowerShell avec SharePoint Online.

Modules disponibles
Client Side Object Model


Utiliser PowerShell avec SharePoint Online est assez simple. Avec vos identifiants d’administrateur SharePoint en tête, vous devrez ouvrir une session PowerShell en tant qu’administrateur et installer quelques outils :

Modules disponibles



-Module SharePoint Online: (Correspondant a SharePoint Online Management Shell)

Vous pouvez utiliser ce module pour exécuter des actions sur les Sites, les utilisateurs et les tâches d’administration de haut niveau .
Vous pouvez installer ce module sur votre machine directement dans PowerShell.

Install-Module -Name Microsoft.Online.SharePoint.PowerShell
#Récupérer les commandes disponibles dans ce module
Get-Command -Module Microsoft.Online.SharePoint.PowerShell.


Install SPO Module Powershell
173 cmdLet disponibles dans ce module

Pour commencer à utiliser ce module, vous devez vous connecter à l’Url d’administration de votre environnement SharePoint Online. Vous pouvez trouver cette URL en naviguant vers le centre d’administration SharePoint, elle ressemble à https://[domain]-admin.sharepoint.com.

Connect-SPOService -Url'https://btcstech-admin.sharepoint.com'

Aligner Vous serez invité à saisir vos identifiants d’administrateur SharePoint et vous êtes prêt 🙂
Vous pouvez trouver la documentation complète pour chaque cmdLet disponible sur Microsoft Docs.

Lors de la recherche d’exemples sur le Web, vous pouvez reconnaître les cmdLets de ce module avec la syntaxe Verb-SPO Noun, comme Get-SPOSite, Add-SPOHubSiteAssociation …


-SharePoint PNP PowerShell module : (Module communautaire)
Ce module a été développé au fil du temps par la communauté SharePoint , il cible les actions en profondeur comme la manipulation de listes, bibliothèques, fichiers et éléments. Vous pouvez installerce module sur votre machine directement dans PowerShell.

Install-Module SharePointPnPnPPowerShellOnline -AllowClobber
#Récupérer les commandes disponibles dans ce module
Get-Command -Module SharePointPnPnPowerShellOnline


Install PNP online SharePoint Powershell module
404 cmdLet disponibles pour ce module

Pour commencer à utiliser ce module, vous pouvez vous connecter à l’Url d’administration de votre environnement SharePoint Online ou directement à un site SharePoint:

#Connexion à l'Url d'administration de votre environnement SharePoint Online
Connect-PNPOnline -Url 'https://btcstech-admin.sharepoint.com'
#Se connecter à un site SharePoint Online
Connect-PNPOnline -Url 'https://btcstech.sharepoint.com/sites/mysite'

Vous serez invité à saisir vos identifiants d’administrateur et vous êtes prêt 🙂

Une petite astuce, lorsque vous avez besoin d’utiliser CmdLet à partir de ces deux modules dans votre script, vous pouvez utiliser le même objet d’identification lors de la connexion avec PNP:

#Connexion au module SharePoint Online
Connect-SPOService 'https://btcstech-admin.sharepoint.com'
#Eviter la saisir des identifiants quand vous êtes déjà connectés avec 'Connect-SPOService'
Connect-PNPOnline -Url 'https://btcstech.sharepoint.com/sites/mysite' -SPOManagementShell

Vous trouverez la documentation complète pour chaque cmdLet disponible sur Microsoft Docs.

Lors de la recherche d’exemples sur le Web, vous pouvez reconnaître les cmdLets de ce module avec la syntaxe Verb-PNP Noun, comme Get-PNPSite, Add-PNPFile …

Client Side Object Model (CSOM)



C’est le client side object model, vous permettant d’exécuter un ensemble complet d’actions avec SharePoint. Téléchargeable ici

Ce n’est pas un module a part entière, ce sont des fichiers dll que vous pouvez importer dans vos scripts pour utiliser les classes SharePoint.
Pour l’utiliser, vous devrez installer les dlls sur votre machine, et exécuter les lignes suivante au début de vos scripts :

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

Si vous l’avez installé manuellement quelque part sur votre machine, vous pouvez utiliser Add-Type:

Add-Type -Path 'c:/mypath/Microsoft.SharePoint.Client.dll'
Add-Type -Path 'c:/mypath/Microsoft.SharePoint.Client.Runtime.dll'

Une fois que vous avez chargé ces dlls en utilisant une des techniques ci-dessus, vous pouvez maintenant utiliser les classes SharePoint. Voici la façon dont vous vous connecterez à un site SharePoint :

#Définition de l'url du site
$SiteUrl= 'https://btcstech.sharepoint.com/sites/mysite'
#Récupération des identifiants
$Credentials = Get-Credential
#Utilisation de la class SharePointOnlineCredentials
$SPOCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Credentials.UserName , $Credentials.Password)
#Création du ClientContext
$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
#Configuration des identifiants du ClientContext
$Ctx.Credentials = $SPOCredentials
#Appel de ExecuteQuery() pour vérifier que tout est ok (sinon vous aurez une erreur)
$Ctx.ExecuteQuery()

L’utilisation du CSOM est un peu plus complexe que d’utiliser des modules. Tout commence par la construction d’un contexte authentifié, et envoyez les informations à SharePoint avec la méthode ClientContext.Executequery().

Vous pourriez aussi être intéressé par les méthodes Update() et Load(), voici quelques illustrations avec le contexte que nous avons construit ci-dessus

#Je veux récupérer toutes les listes du site auquel je me suis connecté
$Listes = $Ctx.Web.Lists

A ce point nous venons de définir que la variable $Listes, nous avons en fait besoin d’envoyer la requête à SharePoint en utilisant les méthodes Load() et ExecuteQuery() sinon nous aurons ce message :

#Quand j'essaie d'accéder à cette variable de liste
$Listes
collection has not been initialized
Collection has not been initialized

Pour récupérer et manipuler des informations depuis SharePoint, nous avons besoin d’utiliser les méthodes Load() et ExecuteQuery():

$Ctx.Load($Listes) 
ExecuteQuery() 
$Listes| sélectionner -Property Title, BaseType 
Liste montrant le Title et BaseType

Pour illustrer la méthode update(), prenons un autre exemple où vous voulez désactiver la fonction Synchronisation d’une bibliothèque de documents:

#Charger la bibliothèque de documents que vous voulez avec la méthode GetByTitle('Name')
$myDocLib = $Ctx.Web.Lists.GetByTitle('Documents')
$Ctx.load($myDocLib)
ExecuteQuery()
$myDocLib | select -Property Title, BaseType

#Désactiver la synchronisation pour cette bibliothèque
$myDocLib.ExcludeFromOfflineClient = $true
$myDocLib.update()
ExecuteQuery()
#check
$myDocLib.ExcludeFromOfflineClient
ExcludeFromOfflineClient
Plus possible de synchroniser cette bibliothèque

Pour aller un peu plus loin, gardez à l’esprit que vous n’obtiendrez une erreur qu’au moment où vous utilisez ExecuteQuery().
Une autre spécificité est que vous pouvez faire plusieurs changements avant d’appeler la méthode Clientcontext.ExecuteQuery(), cela pourrait augmenter les performances de votre script, mais vous pourriez être limité par un délai d’attente lorsque vous faites des requêtes trop importantes. J’ai trouvé une belle vidéo sur les techniques CSOM pour augmenter les performances, elle est écrite en C# mais pourrait être utile

En ce qui concerne PowerShell, vous pouvez exécuter cmdLets ou scripts manuellement si nécessaire ou automatiser l’exécution de scripts en utilisant le planificateur de tâches sur une machine, ou en utilisant les Azure fonctions (PowerShell est maintenant officiellement supportée pour les Azure fonctions). Si vous avez besoin de plus d’informations sur les Azure fonctions, voici un petit guide sur Microsoft docs.

Pour illustrer ce besoin d’automatisation, je me souviens d’une demande où nous avons développé un petit script assurant que chaque collection de sites ait bien deux propriétaires, puis envoyant un rapport chaque week-end par email.

J’espère vraiment que vous avez trouvé ces informations utiles pour commencer à utiliser PowerShell avec SharePoint, gardez à l’esprit que vous pouvez aussi utiliser l’API GRAPH pour manipuler SharePoint.

A bientôt sur le blog 😎

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.