Comment accéder à l’historique des conversations Microsoft Teams et l’exporter avec PowerShell
Parfois, récupérer l’historique des conversations Teams n’est pas chose aisée. C’est particulièrement vrai si vous souhaitez automatiser le processus ou si vous ne trouvez rien d’utilisable dans Outlook ou les outils d’exportation habituels. En effet, les conversations Teams sont stockées dans un dossier caché d’une boîte aux lettres partagée associée au groupe : « Historique des conversations\Discussions d’équipe ». Y accéder n’est pas compliqué si vous connaissez la marche à suivre, mais ce n’est pas aussi simple qu’un clic. Utiliser PowerShell avec l’API Microsoft Graph est généralement la méthode la plus simple pour récupérer les messages, surtout si vous souhaitez créer des scripts ou analyser les données de conversation sans manipuler de fichiers PST. La prise en main peut paraître complexe au premier abord, car il faut configurer une application Azure AD, obtenir les autorisations nécessaires, puis rédiger des commandes. Mais une fois maîtrisée, cette méthode est très flexible et permet de personnaliser les requêtes pour obtenir les informations souhaitées. En résumé : cela vaut la peine si vous souhaitez explorer l’historique des conversations Teams au-delà des possibilités offertes par l’interface graphique.
Comment résoudre le problème d’accès à l’historique des conversations Teams avec PowerShell
Méthode 1 : Configurer un enregistrement d’application Azure
L’ajout d’une inscription d’application dans Azure AD est la première étape. Cela permet à vos scripts PowerShell de s’authentifier de manière sécurisée sans avoir besoin de l’identifiant d’un utilisateur. Cette configuration garantit que votre script peut interroger les messages Teams via l’API Graph.- Accédez à Portail Azure > Azure Active Directory > Inscriptions d’applications > Nouvelle inscription.- Nommez votre application (par exemple, « TeamsChatExport ») et inscrivez-la.- Une fois l’inscription effectuée, récupérez l’ID d’application (client) et l’ID d’annuaire (locataire) dans la vue d’ensemble de l’application.- Accédez à Autorisations d’API > Ajouter une autorisation.- Choisissez Microsoft Graph > Autorisations d’application.- Ajoutez `Channel. Basic. ReadAll` et `ChannelMessage. Read`.Ce sont les autorisations minimales pour lister les messages dans les canaux.- Ajoutez également `Group. Read. All` et `Directory. AccessAsUser. All` si vous souhaitez un accès plus étendu.- Après avoir ajouté les autorisations, cliquez sur Accorder le consentement de l’administrateur pour qu’elles prennent effet immédiatement. Accédez à Certificats et secrets > Nouveau secret client, créez un secret et copiez sa valeur. Conservez-la précieusement ; elle est comme le mot de passe de votre script. Remarque : sur certaines configurations, l’option « Accorder le consentement de l’administrateur » peut échouer si vos règles d’administration la restreignent. Dans ce cas, vous aurez peut-être besoin de l’aide de votre administrateur informatique.
Méthode 2 : Authentifier PowerShell à l’aide de l’API Microsoft Graph
Une fois votre application configurée, vous vous authentifierez via PowerShell. Cette étape pose souvent problème car le script doit gérer les jetons OAuth, mais elle reste gérable. Voici un exemple rapide pour obtenir votre jeton : powershell $clientId = « votre_ID_d’application » $tenantName = « votre_tenant.onmicrosoft.com » $clientSecret = « votre_secret » $resource = « https://graph.microsoft.com/ » $Username = « [email protected] » $Password = « votre_mot_de_passe » # Non idéal pour la sécurité, mais fonctionne pour les tests $tokenBody = @{ Grant_Type = « Password » client_id = $clientId client_secret = $clientSecret scope = « https://graph.microsoft.com/.default » username = $Username password = $Password } $tokenResponse = Invoke-RestMethod -Uri « https://login.microsoftonline.com/$tenantName/oauth2/v2.0/token » -Method POST -Body $tokenBody Ceci vous donne un jeton d’accès, que vous utiliserez dans vos appels d’API. Pour info, pour les scripts de production, les flux OAuth comme le code du périphérique ou les certificats sont une meilleure option : moins fragiles, plus sécurisés.
Comment extraire et sauvegarder les messages de conversation Teams
Une fois authentifié, vous pouvez utiliser PowerShell pour interroger les messages d’un canal Teams. Voici comment cela fonctionne : – Lister toutes les équipes (groupes avec resourceProvisioningOptions incluant « Team ») – Sélectionner votre équipe par son ID – Lister les canaux de cette équipe – Sélectionner votre canal (par son ID) – Demander les messages de ce canal – Parcourir les messages et les réponses pour obtenir un historique complet des conversations. Voici un extrait de code qui récupère le contenu et génère un rapport HTML : powershell $header = @{Authorization = « Bearer $($tokenResponse.access_token) »} $BaseURI = « https://graph.microsoft.com/beta » # Lister toutes les équipes $teams = (Invoke-RestMethod -Uri « $($BaseURI)/groups?`$filter=resourceProvisioningOptions/Any(x:x eq ‘Team’) » -Headers $header).value $teams | ForEach-Object { $_.id, $_.displayName } # Exemple : lister les canaux d’une équipe spécifique $TeamsID = « votre_id_d_équipe » $channels = (Invoke-RestMethod -Uri « $($BaseURI)/teams/$TeamsID/channels » -Headers $header).value $channels | ForEach-Object { $_.id, $_.displayName } # Exemple : récupérer les messages d’un canal spécifique $ChannelID = « votre_id_de_chat » $messagesData = Invoke-RestMethod -Uri « $($BaseURI)/teams/$TeamsID/channels/$ChannelID/messages » -Headers $header $messages = $messagesData.value # Parcourir les messages et récupérer les réponses class messageData { [string]$dateTime [string]$from [string]$body [string]$re messageData() { $this.dateTime = « » $this.from = « » $this.body = « » $this.re = « » } } $messageSet = New-Object System. Collections. ArrayList foreach ($message in $messages) { $result = [PSCustomObject]@{ DateTime = (Get-Date -Date $message.createdDateTime).ToString(‘yyyy/MM/dd HH:mm’) From = $message.from.user.displayName Body = $message.body.content Re = « » } $messageSet. Add($result) # Récupérer les réponses à ce message $repliesUri = « $($BaseURI)/teams/$TeamsID/channels/$ChannelID/messages/$($message.id)/replies » $repliesResponse = Invoke-RestMethod -Uri $repliesUri -Headers $header foreach ($reply in $repliesResponse.value) { $replyResult = [PSCustomObject]@{ DateTime = (Get-Date -Date $reply.createdDateTime).ToString(‘yyyy/MM/dd HH:mm’) From = $reply.from.user.displayName Body = $reply.body.content Re = « RE » } $messageSet. Add($replyResult) } } # Enregistrer la conversation complète dans un fichier HTML $messageSet | ConvertTo-Html | Out-File « C:\ps\teams_chat.html » -Encoding utf8 Ce script est un peu rudimentaire, mais il fonctionne : il liste les messages, récupère les réponses et exporte le tout dans un fichier HTML lisible. Il n’est pas infaillible, surtout si les identifiants d’équipe ou de canal ne sont pas connus. Préparez-vous à analyser les réponses de l’API pour trouver ces identifiants.
Conclure
Récupérer l’historique des conversations Teams via PowerShell et l’API Graph n’est pas une mince affaire, mais c’est faisable une fois la configuration initiale effectuée. L’élément clé est l’enregistrement de l’application Azure : un peu complexe au départ, mais qui offre une bien plus grande flexibilité aux scripts. Ensuite, interroger l’API Graph pour obtenir les messages, les réponses et générer du HTML est assez simple en théorie, mais peut se compliquer en cas de problèmes d’autorisations ou d’identifiants. Si cela ne fonctionne pas du premier coup, il est probable que vous deviez revérifier les autorisations ou les jetons OAuth. Parfois, l’accès aux données Teams peut s’avérer difficile en raison des restrictions du locataire ou des limitations de l’API. Néanmoins, avec de la patience, c’est un moyen efficace de récupérer les informations de conversation sans copie manuelle ni exportations traditionnelles.
Résumé
- Créez une inscription d’application Azure AD avec les autorisations API appropriées.
- Authentifiez-vous à l’aide de PowerShell avec des jetons OAuth.
- Utilisez les points de terminaison de l’API Graph pour lister les équipes, les canaux et les messages.
- Parcourez les conversations et les réponses pour générer un historique complet.
- Exporter au format HTML pour faciliter la visualisation.
Conclure
Cette méthode devrait vous permettre de consulter plus efficacement l’historique de vos conversations Teams. C’est un processus un peu complexe, mais il en vaut la peine si vous avez besoin d’enregistrements détaillés ou si vous souhaitez automatiser certaines tâches. N’oubliez pas que les autorisations et les identifiants sont essentiels ; vérifiez-les attentivement si vous rencontrez des problèmes.