SharePoint Online est la plateforme collaborative cloud de Microsoft permettant la création de sites d’équipe, le stockage de documents et la gestion des permissions dans un environnement Microsoft 365.
📦 Installation et connexion
📌 Action 🧠 Commande PowerShell 🔧 Installer module SharePoint Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Force
🔧 Installer PnP PowerShell Install-Module -Name PnP.PowerShell -Force
🔗 Se connecter (Admin) Connect-SPOService -Url https://tenant-admin.sharepoint.com
🔗 Se connecter (PnP) Connect-PnPOnline -Url https://tenant.sharepoint.com/sites/sitename -Interactive
✅ Vérifier connexion Get-SPOTenant
🚪 Se déconnecter Disconnect-SPOService
Qu’est-ce que PnP PowerShell ?
PnP = “Patterns and Practices” - Module PowerShell communautaire plus puissant que le module SharePoint officiel de Microsoft.
Avantages de PnP :
✅ Plus de cmdlets : 600+ commandes vs ~150 pour le module officiel
✅ Plus granulaire : Gestion listes, bibliothèques, permissions au niveau élément
✅ Cross-platform : Fonctionne sur Windows, Mac, Linux
✅ Moderne : Basé sur Microsoft Graph et REST APIs
✅ Communauté active : Mis à jour plus fréquemment
Utilisez PnP pour : Gestion fine des permissions, automatisation complexe, scripts avancés
Utilisez SharePoint officiel pour : Administration tenant, gestion de base des sites
🏢 Gestion des sites
📌 Action 🧠 Commande 📋 Lister tous les sites Get-SPOSite -Limit All
🔍 Rechercher un site Get-SPOSite -Filter "Url -like '*marketing*'"
🆕 Créer site d’équipe New-SPOSite -Url "https://tenant.sharepoint.com/sites/marketing" -Title "Marketing" -Owner "admin@tenant.com" -Template "STS#3"
🆕 Créer site communication New-SPOSite -Url "https://tenant.sharepoint.com/sites/news" -Title "Actualités" -Owner "admin@tenant.com" -Template "SITEPAGEPUBLISHING#0"
✏️ Modifier titre site Set-SPOSite -Identity "https://tenant.sharepoint.com/sites/marketing" -Title "Marketing Team"
🗑️ Supprimer site Remove-SPOSite -Identity "https://tenant.sharepoint.com/sites/oldsite" -Confirm:$false
🔄 Restaurer site supprimé Restore-SPODeletedSite -Identity "https://tenant.sharepoint.com/sites/oldsite"
🎭 Rôles et permissions SharePoint
Niveaux d’autorisation par défaut
📌 Rôle 🔧 Permissions 💼 Usage typique Propriétaire Contrôle total du site Administrateurs d’équipe Membre Lecture, écriture, suppression Collaborateurs actifs Visiteur Lecture uniquement Consultants, invités Concepteur Membre + gestion listes/pages Responsables contenu Contributeur Lecture, écriture (pas suppression) Utilisateurs standards
Permissions détaillées
📌 Niveau 📖 Lecture ✏️ Écriture 🗑️ Suppression ⚙️ Administration 🔧 Design Contrôle total ✅ ✅ ✅ ✅ ✅ Conception ✅ ✅ ✅ ❌ ✅ Collaboration ✅ ✅ ✅ ❌ ❌ Contribution ✅ ✅ ❌ ❌ ❌ Lecture ✅ ❌ ❌ ❌ ❌
👥 Gestion des permissions
📌 Action 🧠 Commande 👁️ Voir permissions site Get-PnPSiteCollectionAdmin -Connection $conn
➕ Ajouter administrateur site Add-PnPSiteCollectionAdmin -Owners "admin@tenant.com"
➖ Retirer administrateur Remove-PnPSiteCollectionAdmin -Owners "admin@tenant.com"
👥 Ajouter utilisateur Add-PnPGroupMember -Group "Site Members" -LoginName "user@tenant.com"
🚫 Retirer utilisateur Remove-PnPGroupMember -Group "Site Members" -LoginName "user@tenant.com"
📋 Lister membres groupe Get-PnPGroupMember -Group "Site Members"
Héritage des permissions
# Briser l'héritage des permissions d'une liste
Set-PnPList - Identity " Documents " - BreakRoleInheritance - CopyRoleAssignments
# Restaurer l'héritage des permissions
Set-PnPList - Identity " Documents " - ResetRoleInheritance
🚀 Intégration avec Microsoft Teams
📌 Action 🧠 Commande/Interface 🔗 Associer site existant à Teams Interface Teams > Ajouter un onglet > SharePoint 📁 Accéder aux fichiers Teams https://tenant.sharepoint.com/sites/teamname/Shared Documents
👁️ Voir sites liés à Teams Get-SPOSite | Where-Object {$_.Template -eq "GROUP#0"}
🆕 Créer équipe Teams (crée le site) Interface Teams ou New-Team
(module Teams) ⚙️ Gérer permissions via Teams Interface Teams > Paramètres > Membres
Structure site Teams
Site SharePoint Teams
├── 📁 Documents partagés (Bibliothèque par défaut)
├── 📁 [Canal] - Général (Dossier automatique)
├── 📁 [Canal] - Marketing (Un dossier par canal)
└── 📋 Listes personnalisées (si créées)
💾 Stockage et quotas
📌 Action 🧠 Commande 📊 Voir stockage tenant Get-SPOTenant | Select StorageQuota,StorageQuotaAllocated
📈 Voir usage par site Get-SPOSiteContentMoveState -Identity "https://tenant.sharepoint.com/sites/marketing"
⚙️ Définir quota site Set-SPOSite -Identity "https://tenant.sharepoint.com/sites/marketing" -StorageQuota 2048
📋 Lister sites > 1GB Get-SPOSite -Limit All | Where-Object {$_.StorageUsageCurrent -gt 1024} | Select Url,StorageUsageCurrent
📊 Scripts d’export et gestion
Export liste des sites
# Export complet des sites avec détails
Get-SPOSite - Limit All | Select Url , Title , Owner , Template , StorageUsageCurrent , LastContentModifiedDate |
Export-Csv - Path " C:\temp\SharePointSites.csv " - NoTypeInformation - Encoding UTF8
Export permissions par site
# Script d'export des permissions détaillées
$sites = Get-SPOSite - Limit All
$results = foreach ($site in $sites) {
Connect-PnPOnline - Url $site.Url - Interactive
$groups = Get-PnPGroup
foreach ($group in $groups) {
$members = Get-PnPGroupMember - Group $group.Title
foreach ($member in $members) {
[ PSCustomObject ] @ {
SiteUrl = $site.Url
SiteTitle = $site.Title
GroupName = $group.Title
MemberName = $member.Title
MemberEmail = $member.Email
MemberType = $member.PrincipalType
}
}
}
}
$results | Export-Csv - Path " C:\temp\SharePointPermissions.csv " - NoTypeInformation - Encoding UTF8
Création sites en masse via CSV
# Format CSV attendu : SiteName,SiteUrl,Owner,Template
$sites = Import-Csv - Path " C:\temp\NewSites.csv " - Delimiter " ; "
foreach ($site in $sites) {
try {
New-SPOSite - Url $site.SiteUrl - Title $site.SiteName - Owner $site.Owner - Template $site.Template - Wait
Write-Host " ✓ Site créé : $ ( $site.SiteName ) " - ForegroundColor Green
} catch {
Write-Host " ✗ Erreur création $ ( $site.SiteName ) : $ ( $_ .Exception.Message ) " - ForegroundColor Red
}
}
Ajout d’utilisateurs en masse
# Format CSV : SiteUrl,UserEmail,Permission
$permissions = Import-Csv - Path " C:\temp\SitePermissions.csv " - Delimiter " ; "
foreach ($perm in $permissions) {
try {
Connect-PnPOnline - Url $perm.SiteUrl - Interactive
$groupName = switch ($perm.Permission) {
" Read " { " Site Visitors " }
" Contribute " { " Site Members " }
" FullControl " { " Site Owners " }
}
Add-PnPGroupMember - Group $groupName - LoginName $perm.UserEmail
Write-Host " ✓ Ajouté $ ( $perm.UserEmail ) à $ ( $perm.SiteUrl ) " - ForegroundColor Green
} catch {
Write-Host " ✗ Erreur ajout $ ( $perm.UserEmail ) : $ ( $_ .Exception.Message ) " - ForegroundColor Red
}
}
🔧 Templates de sites courants
📌 Template 🏷️ Code 💡 Usage Site d’équipe STS#3
Collaboration équipe standard Site communication SITEPAGEPUBLISHING#0
News, annonces corporate Site vierge STS#1
Site personnalisé from scratch Wiki d’entreprise WIKI#0
Base de connaissances Centre de documents BDR#0
Gestion documentaire avancée
🚨 Dépannage courant
📌 Problème 🔧 Solution 🚫 Accès refusé Vérifier permissions, héritage, groupes AD/Entra ⏱️ Site lent Vérifier taille bibliothèques, nombre d’éléments, vues 📱 Mobile ne fonctionne pas Activer “Autoriser applications mobiles” dans paramètres 🔄 Sync OneDrive échoue Réinitialiser client, vérifier caractères spéciaux 💾 Quota dépassé Augmenter quota ou nettoyer anciennes versions
🔗 Centre d’administration SharePoint