Exchange Online est le service de messagerie cloud de Microsoft offrant des fonctionnalités d’email, calendrier et contacts.
📦 Installation et connexion
| 📌 Action | 🧠 Commande PowerShell |
|---|
| 🔧 Installer module Exchange | Install-Module -Name ExchangeOnlineManagement -Force |
| 🔗 Se connecter | Connect-ExchangeOnline |
| 🔗 Se connecter (MFA) | Connect-ExchangeOnline -UserPrincipalName admin@tenant.com |
| ✅ Vérifier connexion | Get-OrganizationConfig |
| 🚪 Se déconnecter | Disconnect-ExchangeOnline -Confirm:$false |
📧 Gestion des boîtes aux lettres
Types de boîtes aux lettres
| 📌 Type | 💰 Licence requise | 💼 Usage |
|---|
| Utilisateur | Office 365/M365 | Boîte personnelle |
| Partagée | Aucune | Équipe, service |
| Ressource - Salle | Exchange Online Plan 1 | Réservation salles |
| Ressource - Équipement | Exchange Online Plan 1 | Matériel partagé |
| 📌 Action | 🧠 Commande |
|---|
| 📋 Lister toutes les boîtes | Get-Mailbox -ResultSize Unlimited |
| 🔍 Rechercher boîte mail | Get-Mailbox -Identity "jdupont@tenant.com" |
| 👤 Créer boîte utilisateur | New-Mailbox -Name "Jean Dupont" -UserPrincipalName "jdupont@tenant.com" -FirstName "Jean" -LastName "Dupont" |
| 📮 Créer boîte partagée | New-Mailbox -Name "Support" -PrimarySmtpAddress "support@tenant.com" -Shared |
| 🏢 Créer boîte ressource | New-Mailbox -Name "Salle Réunion A" -Room -PrimarySmtpAddress "salle-a@tenant.com" |
| ✏️ Modifier nom d’affichage | Set-Mailbox -Identity "jdupont@tenant.com" -DisplayName "Jean Dupont - IT" |
| 🗑️ Supprimer boîte mail | Remove-Mailbox -Identity "jdupont@tenant.com" -Confirm:$false |
| 🔒 Désactiver boîte mail | Set-Mailbox -Identity "jdupont@tenant.com" -AccountDisabled:$true |
👥 Groupes de distribution
Types de groupes Exchange
| 📌 Type | 🔧 Caractéristiques | 💼 Usage |
|---|
| Liste de distribution (DL) | Liste statique, gestion manuelle | Équipes, départements |
| Liste de distribution dynamique (DDL) | Basé sur critères AD automatiques | Tous les managers, nouveaux employés |
| Groupe de sécurité | Peut être utilisé pour permissions | Accès SharePoint + distribution |
| Groupe Office 365 | Intégré SharePoint/Teams | Collaboration complète |
| 📌 Action | 🧠 Commande |
|---|
| 📋 Lister tous les groupes | Get-DistributionGroup -ResultSize Unlimited |
| 🆕 Créer groupe distribution | New-DistributionGroup -Name "IT Team" -PrimarySmtpAddress "it@tenant.com" |
| 🆕 Créer liste dynamique | New-DynamicDistributionGroup -Name "Tous IT" -Filter "Department -eq 'IT'" |
| ➕ Ajouter membre | Add-DistributionGroupMember -Identity "IT Team" -Member "jdupont@tenant.com" |
| ➖ Retirer membre | Remove-DistributionGroupMember -Identity "IT Team" -Member "jdupont@tenant.com" |
| 👁️ Voir membres | Get-DistributionGroupMember -Identity "IT Team" |
| ✏️ Modifier description | Set-DistributionGroup -Identity "IT Team" -Notes "Équipe informatique principale" |
| 🗑️ Supprimer groupe | Remove-DistributionGroup -Identity "IT Team" -Confirm:$false |
🔐 Permissions et délégations
| 📌 Action | 🧠 Commande |
|---|
| 👁️ Voir permissions boîte | Get-MailboxPermission -Identity "shared@tenant.com" |
| ➕ Ajouter accès complet | Add-MailboxPermission -Identity "shared@tenant.com" -User "jdupont@tenant.com" -AccessRights FullAccess |
| 📧 Ajouter “Envoyer en tant que” | Add-RecipientPermission -Identity "shared@tenant.com" -Trustee "jdupont@tenant.com" -AccessRights SendAs |
| 📤 Ajouter “Envoyer de la part de” | Set-Mailbox -Identity "shared@tenant.com" -GrantSendOnBehalfTo "jdupont@tenant.com" |
| 🗑️ Retirer permission | Remove-MailboxPermission -Identity "shared@tenant.com" -User "jdupont@tenant.com" -AccessRights FullAccess |
| 🔄 Activer automapping | Add-MailboxPermission -Identity "shared@tenant.com" -User "jdupont@tenant.com" -AccessRights FullAccess -AutoMapping $true |
| 🚫 Désactiver automapping | Add-MailboxPermission -Identity "shared@tenant.com" -User "jdupont@tenant.com" -AccessRights FullAccess -AutoMapping $false |
Types de permissions
| 📌 Permission | 🔧 Accès | 💡 Usage typique |
|---|
| FullAccess | Lecture/écriture complète | Assistante, suppléant |
| SendAs | Envoyer comme propriétaire | Communication officielle |
| SendOnBehalf | Envoyer de la part de | Délégation visible |
| ReadPermission | Lecture seule | Audit, consultation |
📊 Quotas et stockage
| 📌 Action | 🧠 Commande |
|---|
| 👁️ Voir quota boîte mail | Get-Mailbox -Identity "jdupont@tenant.com" | Select ProhibitSendQuota,ProhibitSendReceiveQuota |
| ⚙️ Modifier quota utilisateur | Set-Mailbox -Identity "jdupont@tenant.com" -ProhibitSendQuota 90GB -ProhibitSendReceiveQuota 100GB |
| 📈 Voir utilisation stockage | Get-MailboxStatistics -Identity "jdupont@tenant.com" | Select DisplayName,TotalItemSize,ItemCount |
| 📋 Top 10 plus grosses boîtes | Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort TotalItemSize -Descending | Select -First 10 DisplayName,TotalItemSize |
Limites de stockage par licence
| 📌 Licence | 📦 Quota standard | 📈 Archivage | 💰 Coût supplémentaire |
|---|
| Exchange Online Plan 1 | 50 GB | Optionnel | Archivage +/mois |
| Office 365 E3 | 100 GB | Inclus illimité | - |
| Office 365 E5 | 100 GB | Inclus illimité | - |
| Boîte partagée | 50 GB gratuit → 100GB avec licence E3 | Disponible avec licence | - |
📊 Scripts d’export et gestion
Export liste des boîtes mail
# Export complet avec statistiques
$mailboxes = Get-Mailbox -ResultSize Unlimited
$results = foreach($mailbox in $mailboxes) {
$stats = Get-MailboxStatistics -Identity $mailbox.UserPrincipalName
[PSCustomObject]@{
DisplayName = $mailbox.DisplayName
UserPrincipalName = $mailbox.UserPrincipalName
MailboxType = $mailbox.RecipientTypeDetails
TotalSize = $stats.TotalItemSize
ItemCount = $stats.ItemCount
LastLogon = $stats.LastLogonTime
ProhibitSendQuota = $mailbox.ProhibitSendQuota
}
}
$results | Export-Csv -Path "C:\temp\ExchangeMailboxes.csv" -NoTypeInformation -Encoding UTF8
Export groupes de distribution et membres
# Export détaillé des groupes DL
$groups = Get-DistributionGroup -ResultSize Unlimited
$results = foreach($group in $groups) {
$members = Get-DistributionGroupMember -Identity $group.Identity
foreach($member in $members) {
[PSCustomObject]@{
GroupName = $group.DisplayName
GroupEmail = $group.PrimarySmtpAddress
MemberName = $member.DisplayName
MemberEmail = $member.PrimarySmtpAddress
MemberType = $member.RecipientTypeDetails
}
}
}
$results | Export-Csv -Path "C:\temp\DistributionGroups.csv" -NoTypeInformation -Encoding UTF8
Création boîtes mail en masse via CSV
# Format CSV : DisplayName,UserPrincipalName,FirstName,LastName,Department
$users = Import-Csv -Path "C:\temp\NewMailboxes.csv" -Delimiter ";"
foreach($user in $users) {
try {
New-Mailbox -Name $user.DisplayName `
-UserPrincipalName $user.UserPrincipalName `
-FirstName $user.FirstName `
-LastName $user.LastName `
-Department $user.Department
Write-Host "✓ Boîte créée : $($user.DisplayName)" -ForegroundColor Green
} catch {
Write-Host "✗ Erreur création $($user.DisplayName) : $($_.Exception.Message)" -ForegroundColor Red
}
}
Ajout membres groupes DL en masse
# Format CSV : GroupName,MemberEmail
$members = Import-Csv -Path "C:\temp\GroupMembers.csv" -Delimiter ";"
foreach($member in $members) {
try {
Add-DistributionGroupMember -Identity $member.GroupName -Member $member.MemberEmail
Write-Host "✓ Ajouté $($member.MemberEmail) à $($member.GroupName)" -ForegroundColor Green
} catch {
Write-Host "✗ Erreur ajout $($member.MemberEmail) : $($_.Exception.Message)" -ForegroundColor Red
}
}
🚨 Dépannage courant
| 📌 Problème | 🔧 Solution |
|---|
| 📧 Emails non livrés | Vérifier Get-MessageTrace, règles transport, quotas |
| 🔒 Accès refusé boîte partagée | Vérifier permissions, automapping, cache Outlook |
| ⏱️ Synchronisation lente | Forcer sync AD : Start-ADSyncSyncCycle -PolicyType Delta |
| 📱 Mobile ne reçoit plus | Réinitialiser partenariat : Remove-MobileDevice puis reconnecter |
| 💾 Quota dépassé | Vérifier Get-MailboxStatistics, activer archivage |