Procédure pour l’administrateur Microsoft 365 · environ 30 minutes, puis jusqu’à 2 heures d’application des droits par Microsoft.
Objectif
TVTools RoomBooking lit et met à jour les calendriers de vos salles de réunion par Microsoft Graph, l’interface de Microsoft qui remplace Exchange Web Services (EWS). L’accès est accordé à une application, sans compte de service ni licence, et il est limité aux seules salles d’un groupe que vous gérez.
À savoir : Microsoft arrête EWS dans Exchange Online : désactivation progressive depuis le 1er octobre 2026, arrêt définitif le 1er avril 2027. Cette procédure n’utilise pas EWS.
Scripts guidés : toutes les étapes ci-dessous peuvent aussi être réalisées avec les scripts du dossier « TVTools RoomBooking – Microsoft Graph », à télécharger ici : CLIQUEZ ICI.
Décompressez-le, remplissez config.psd1 avec le Bloc-notes, puis double-cliquez sur les fichiers .bat dans l’ordre. Chaque commande est affichée avant d’être exécutée, et une simulation sans modification est disponible.
Prérequis
- un compte administrateur général (Global Administrator) de votre organisation Microsoft 365 ;
- PowerShell avec les modules Microsoft.Graph et ExchangeOnlineManagement ;
- les adresses e-mail des salles à afficher sur les écrans TVTools ;
- prévoir jusqu’à 2 heures entre l’attribution des droits (étape 5) et leur prise en compte.
Point important : utilisez un groupe Microsoft 365, pas un groupe de sécurité. Seuls les membres directs du groupe sont pris en compte (pas les membres de groupes imbriqués).
Script guidé : 1 – Preparer (configuration et modules).bat
Installation des modules (une seule fois), puis connexion avec le compte administrateur :
Install-Module Microsoft.Graph -Scope CurrentUser
Install-Module ExchangeOnlineManagement -Scope CurrentUser
Connect-MgGraph -Scopes « Application.Read.All »
Connect-ExchangeOnline
Gardez cette fenêtre PowerShell ouverte jusqu’à l’étape 6 : les variables créées à l’étape 3 servent aux étapes suivantes.
Si une connexion échoue avec « Could not load file or assembly » ou « Method not found » : les deux modules entrent en conflit dans cette fenêtre. Ouvrez une fenêtre PowerShell pour les commandes Microsoft Graph (Get-MgServicePrincipal) et une autre pour Exchange Online, en y reportant les valeurs de $AppId et $ServicePrincipalId affichées à l’étape 3. Les scripts guidés font cette séparation automatiquement.
1. Création du groupe « TVTools Group »
Script guidé : 2 – Etape 1 – Groupe des salles.bat
Dans le Centre d’administration Microsoft 365 (Équipes et groupes > Groupes actifs > Ajouter un groupe), créez un groupe Microsoft 365 nommé « TVTools Group » et ajoutez-y comme membres toutes les salles à afficher sur les écrans TVTools.
Par la suite, ajouter ou retirer une salle se fera simplement en modifiant les membres de ce groupe.
2. Création de l’application « TVTools Calendars » (Microsoft Entra)
Script guidé : 3 – Etape 2 – Application Entra.bat (crée aussi le secret et affiche les informations pour TVTools)
- Inscription : portail Microsoft Entra (entra.microsoft.com) > Applications > Inscriptions d’applications > Nouvelle inscription. Nom : « TVTools Calendars » ; types de comptes : « Comptes dans cet annuaire organisationnel uniquement » ; pas d’URI de redirection ; cliquez sur Inscrire.
- Identifiants : sur la page Vue d’ensemble, notez l’ID d’application (client) et l’ID de l’annuaire (locataire).
- Secret : Certificats et secrets > Nouveau secret client, durée 24 mois. Copiez immédiatement la Valeur (et non l’ID du secret) : elle ne sera plus affichée. Notez aussi la date d’expiration.
- Autorisation : Autorisations d’API > Ajouter une autorisation > Microsoft Graph > Autorisations d’application > User.Read.All > Ajouter des autorisations, puis cliquez sur « Accorder un consentement d’administrateur ».
Important : n’ajoutez aucune autre autorisation d’API, ni Calendars.*, ni full_access_as_app. Ces permissions s’appliqueraient à toutes les boîtes de l’organisation. L’accès aux calendriers est accordé à l’étape 5, limité aux salles du groupe.
3. Déclaration de l’application dans Exchange Online
Script guidé : 4 – Etapes 3 a 5 – Droits Exchange.bat (étapes 3, 4 et 5 en une fois)
Exchange Online doit connaître l’application pour pouvoir lui attribuer un rôle :
$SP = Get-MgServicePrincipal -Filter « displayName eq ‘TVTools Calendars' »
$AppId = $SP.AppId
$ServicePrincipalId = $SP.Id
Write-Host (« AppId : {0} – Id du service principal : {1} » -f $AppId, $ServicePrincipalId)
New-ServicePrincipal -AppId $AppId -ObjectId $ServicePrincipalId -DisplayName ‘PS RBAC TVTools Calendars’
Vérification :
Get-ServicePrincipal | ? AppId -EQ $AppId | fl
Si $AppId est vide, recherchez l’application par le début de son nom, puis reprenez les commandes ci-dessus avec la bonne valeur :
$SP = Get-MgServicePrincipal -ConsistencyLevel eventual -Count spCount -Filter « startsWith(DisplayName, ‘TVTools Calendars’) »
$SP
4. Création de l’étendue « TVTools Scope »
L’étendue limite les droits de l’application aux membres du groupe « TVTools Group » :
$scopedGroup = Get-Group ‘TVTools Group’
New-ManagementScope « TVTools Scope » -RecipientRestrictionFilter « MemberOfGroup -eq ‘$($scopedGroup.DistinguishedName)' »
Vérification :
Get-ManagementScope « TVTools Scope » | fl
5. Attribution du rôle Microsoft Graph
Attribuez à l’application le rôle d’accès aux calendriers, limité à l’étendue « TVTools Scope » :
New-ManagementRoleAssignment -App $AppId -CustomResourceScope ‘TVTools Scope’ -Role ‘Application Calendars.ReadWrite’
Vérification :
Get-ManagementRoleAssignment -Role ‘Application Calendars.ReadWrite’ | fl
La commande doit afficher une attribution pour l’application « TVTools Calendars », avec l’étendue « TVTools Scope ».
Délai : le rôle met de 30 minutes à 2 heures à s’appliquer. Attendez ce délai avant l’étape 7.
6. Test de fonctionnement
Script guidé : 5 – Etape 6 – Test des droits.bat
Vérifiez que l’application a bien le rôle sur une salle membre du groupe (exemple : delta@tvtools.info) :
Test-ServicePrincipalAuthorization -Identity $AppId -Resource delta@tvtools.info | Format-Table RoleName, InScope
Résultat attendu :
RoleName InScope
——– ——-
Application Calendars.ReadWrite True
Sur une boîte qui n’est pas membre du groupe (exemple : omega@tvtools.info), InScope doit être à False :
Test-ServicePrincipalAuthorization -Identity $AppId -Resource omega@tvtools.info | Format-Table RoleName, InScope
Ce test vérifie la configuration immédiatement, sans attendre le délai de l’étape 5. Si une salle du groupe affiche False, vérifiez qu’elle est membre direct du groupe « TVTools Group ».
7. Vérification de la récupération des événements
Script guidé : 6 – Etape 7 – Test du calendrier.bat
Ce test lit le calendrier d’une salle avec les identifiants de l’application, comme le fera TVTools. Lancez-le une fois le délai de l’étape 5 écoulé, dans une nouvelle fenêtre PowerShell : la connexion se fait ici au nom de l’application, et non plus du compte administrateur.
$appId = « xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx »
$clientSecret = « valeur du secret »
$tenantId = « tenant de votre organisation »
$clientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $appId, (ConvertTo-SecureString -String $clientSecret -AsPlainText -Force)
Connect-MgGraph -ClientSecretCredential $clientSecretCredential -TenantId $tenantId
$user = Get-MgUser -Filter « mail eq ‘delta@tvtools.info' »
$events = Get-MgUserEvent -UserId $user.Id -Top 5
$events | Select-Object Subject, @{n=’Debut’;e={$_.Start.DateTime}}, @{n=’Fin’;e={$_.End.DateTime}}
Disconnect-MgGraph
Résultat attendu : des réunions de la salle s’affichent (aucune ligne si son calendrier est vide). La commande Get-MgUser utilise l’autorisation User.Read.All de l’étape 2.
En cas d’erreur « Access is denied » (403, ErrorAccessDenied) : le rôle de l’étape 5 n’est pas encore appliqué (attendez jusqu’à 2 heures), ou la salle n’est pas membre du groupe « TVTools Group ».
Informations à transmettre à TVTools
- l’ID d’application (client) ;
- la valeur du secret client et sa date d’expiration, par un canal sûr (téléphone, lien de partage protégé), pas en clair dans un e-mail ;
- l’ID de l’annuaire (tenant) ;
- la liste des salles (adresses e-mail) membres du groupe « TVTools Group ».
Gestion courante
- Ajouter ou retirer une salle : modifiez les membres du groupe « TVTools Group » (prise en compte en 30 minutes à 2 heures).
- Avant l’expiration du secret : créez un nouveau secret (Certificats et secrets) et transmettez-le à TVTools ; supprimez l’ancien une fois que TVTools vous a confirmé le passage au nouveau.
- Retirer l’accès à TVTools : supprimez l’attribution de rôle de l’étape 5, ou l’application elle-même dans Microsoft Entra.
Vous utilisiez déjà TVTools avec EWS ?
Si votre organisation a déjà suivi la procédure EWS (groupe « TVTools Group », étendue « TVTools Scope » et rôle Application EWS.AccessAsApp), seules les étapes 5 à 7 sont à faire : l’application, le groupe et l’étendue existants sont réutilisés.
Une fois que TVTools vous a confirmé que vos écrans fonctionnent avec Microsoft Graph, l’ancien rôle EWS peut être retiré :
Get-ManagementRoleAssignment -Role ‘Application EWS.AccessAsApp’ | fl Name, RoleAssignee, CustomResourceScope
Remove-ManagementRoleAssignment -Identity « <nom de l’attribution EWS affiché par la commande précédente> »
Ne supprimez ni le groupe « TVTools Group », ni l’étendue « TVTools Scope » : le rôle Microsoft Graph les utilise.
Avantages de cette solution
- plus de compte de service ni de licence associée ;
- gestion simple : il suffit d’ajouter les salles au groupe ;
- sécurité : l’application n’accède qu’aux calendriers des salles du groupe, ni aux e-mails ni aux contacts.
Support
Pour toute difficulté, contactez le support TVTools