Quand vous gérez des salles de réunion ou des équipements dans Office 365, vous allez vite tomber sur un problème : les limites de réservation par défaut sont trop restrictives. Impossible de réserver une salle plus de 24h, pas plus de 180 jours à l’avance… Voici comment modifier ces limites en PowerShell, sur une seule ressource ou sur toutes d’un coup.
Se connecter à Exchange Online
Avant toute chose, il faut se connecter à Exchange Online. Si vous n’avez pas encore le module, installez-le :
# Installer le module Exchange Online (une seule fois)
Install-Module ExchangeOnlineManagement
# Se connecter
Connect-ExchangeOnline -UserPrincipalName admin@votredomaine.com
Vérifier la configuration actuelle
Avant de modifier quoi que ce soit, vérifiez les paramètres actuels de votre ressource :
Get-CalendarProcessing -Identity "NomDeLaRessource" |
Select-Object MaximumDurationInMinutes, BookingWindowInDays, MaximumConflictInstances
Remplacez "NomDeLaRessource" par l’alias, l’email ou le nom complet de la boîte de ressources.
Les paramètres clés
Voici les paramètres que vous pouvez modifier sur le traitement calendrier d’une ressource :
| Paramètre | Description | Valeur par défaut |
|---|---|---|
MaximumDurationInMinutes |
Durée maximale d’une réservation | 1440 (24h) |
BookingWindowInDays |
Combien de jours à l’avance on peut réserver | 180 |
MaximumConflictInstances |
Nombre de conflits tolérés (réunions récurrentes) | 0 |
PercentageAllowedDegradation |
% de dégradation des récurrents autorisé | 0 |
AllowConflicts |
Autoriser les réservations en conflit | $false |
Modifier une seule ressource
Set-CalendarProcessing -Identity "NomDeLaRessource" `
-MaximumDurationInMinutes 1440 `
-MaximumConflictInstances 5 `
-BookingWindowInDays 365 `
-AllowConflicts $false
Dans cet exemple :
- La durée max d’une réservation est de 24 heures (1440 minutes)
- On peut réserver jusqu’à 1 an à l’avance (365 jours)
- Les réunions récurrentes tolèrent jusqu’à 5 conflits
- Les conflits directs restent interdits
Modifier TOUTES les ressources d’un coup
C’est là que ça devient intéressant. Si vous avez 50 salles de réunion, pas question de le faire une par une. Voici la commande qui applique les mêmes paramètres à toutes les boîtes aux lettres de ressources (salles + équipements) :
Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox -ResultSize Unlimited | ForEach-Object {
Set-CalendarProcessing -Identity $_.Identity `
-MaximumDurationInMinutes 1440 `
-MaximumConflictInstances 5 `
-BookingWindowInDays 365 `
-AllowConflicts $false
Write-Host "Mis à jour : $($_.DisplayName)" -ForegroundColor Green
}
Le paramètre -ResultSize Unlimited est important : sans lui, Exchange ne retourne que les 1000 premiers résultats.
Tester avant d’appliquer (dry-run)
Avant de lancer la modification en masse, affichez d’abord la liste des ressources concernées :
Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox -ResultSize Unlimited |
Select-Object DisplayName, Identity
Ça vous permettra de vérifier que vous ne touchez pas à une ressource par erreur.
Version avec gestion d’erreurs (recommandée en production)
En environnement de production, utilisez toujours un try/catch pour éviter qu’une erreur sur une ressource n’arrête tout le script :
Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox -ResultSize Unlimited | ForEach-Object {
try {
Set-CalendarProcessing -Identity $_.Identity `
-MaximumDurationInMinutes 1440 `
-MaximumConflictInstances 5 `
-BookingWindowInDays 365 `
-AllowConflicts $false
Write-Host "Mis à jour : $($_.DisplayName)" -ForegroundColor Green
} catch {
Write-Host "Erreur sur : $($_.DisplayName) - $($_.Exception.Message)" -ForegroundColor Red
}
}
Si une salle pose problème (permissions manquantes, boîte corrompue…), le script continue avec les suivantes au lieu de s’arrêter.
Vérifier les modifications
Après avoir appliqué les changements, vérifiez que tout est bon :
Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox -ResultSize Unlimited | ForEach-Object {
$config = Get-CalendarProcessing -Identity $_.Identity
[PSCustomObject]@{
Salle = $_.DisplayName
DureeMax = "$($config.MaximumDurationInMinutes) min"
FenetreReservation = "$($config.BookingWindowInDays) jours"
ConflitsMax = $config.MaximumConflictInstances
}
} | Format-Table -AutoSize
Cette commande affiche un tableau propre avec les paramètres de chaque ressource.
Récapitulatif
| Action | Commande |
|---|---|
| Voir la config d’une salle | Get-CalendarProcessing -Identity "Salle" |
| Modifier une salle | Set-CalendarProcessing -Identity "Salle" -BookingWindowInDays 365 |
| Lister toutes les ressources | Get-Mailbox -RecipientTypeDetails RoomMailbox,EquipmentMailbox |
| Modifier toutes les salles | Boucle ForEach-Object (voir ci-dessus) |
Pensez à toujours tester sur une seule ressource avant de déployer en masse, et à utiliser le try/catch en production.