В этой статье мы рассмотрим, как получить доступ к содержимому чата Microsoft Teams и экспортировать сообщения из него с помощью PowerShell.
Чаты Teams хранятся в скрытой папке Conversation historyTeam Chat в общем почтовом ящике , который создается автоматически при создании новой группы Microsoft 365 (при этом сращу создается группа Teams, сайта, сайт и библиотека в SharePoint Online, группа Yammer и т.д.
Однако вы не сможете получить доступ к этой защищенной папке с историей чата Teams через Outlook или другое приложения. Вы можете экспортировать содержимое почтового ящика Exchange Online в PST файл с помощью Content Search в Security and Compliance Center, и потом подключить PST файл в Outlook. Но это не очень удобно. Гораздо проще получить список сообщений в чате Teams через PowerShell.
Для подключения к тенанту Microsoft 365 мы будем использовать Microsoft Graph API.
Application (client) ID: your_app_ID
Directory (tenant) ID: your_tenant_ID
Invoked API requires Protected API access in application-only context when not using Resource Specific Consent
. Value: your_secret
Теперь можно подключиться к Azure AD из PowerShell и получить токен доступа.
$clientId = "your_app_ID"_x000D_$tenantName = "yourtenant.onmicrosoft.com"_x000D_$clientSecret = "your_secret"_x000D_$resource = "https://graph.microsoft.com/"_x000D_$Username = "[email protected]"_x000D_$Password = "yourpassword"_x000D_$ReqTokenBody = @{_x000D_ Grant_Type = "Password"_x000D_ client_Id = $clientID_x000D_ Client_Secret = $clientSecret_x000D_ Username = $Username_x000D_ Password = $Password_x000D_ Scope = "https://graph.microsoft.com/.default"_x000D_ }_x000D_$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody_x000D_
Теперь вы можете получить различные данные из Azure AD.
Выведем список Teams в вашем тенанте:
#Getting all Teams_x000D_$header= @{Authorization = "Bearer $($TokenResponse.access_token)"}_x000D_$BaseURI = "https://graph.microsoft.com/beta"_x000D_$AllMicrosoftTeams = (Invoke-RestMethod -Uri "$($BaseURI)/groups?`$filter=resourceProvisioningOptions/Any(x:x eq 'Team')" -Headers $header -Method Get -ContentType "application/json").value_x000D_$AllMicrosoftTeams| FT id, DisplayName,Description_x000D_
Теперь выведем список каналов в нужной вам группе Teams (укажите ее ID):
# List channels in Teams_x000D_$TeamsID="your_team_id"_x000D_$TeamsChannels = (Invoke-RestMethod -Uri "$($BaseURI)/teams/$($TeamsID)/channels" -Headers $Header -Method Get -ContentType "application/json").value_x000D_$TeamsChannels | FT id, DisplayName,Description_x000D_
Теперь вы можете получить список сообщений и ответов на них из чата указанного канала:
$ChannelID="your_chat_id "_x000D_$Header =@{Authorization = "Bearer $($Tokenresponse.access_token)"}_x000D_ $apiUrl = "https://graph.microsoft.com/beta/teams/$TeamsID/channels/$ChannelID/messages"_x000D_$Data = Invoke-RestMethod -Uri $apiUrl -Headers $header -Method Get_x000D_$Messages = ($Data | Select-Object Value).Value_x000D_class messageData_x000D_{_x000D_ [string]$dateTime_x000D_ [string]$from_x000D_ [string]$body _x000D_ [string]$re _x000D_ messageData()_x000D_ {_x000D_ $this.dateTime = ""_x000D_ $this.from = ""_x000D_ $this.body = ""_x000D_ $this.re = ""_x000D_ }_x000D_}_x000D_$messageSet = New-Object System.Collections.ArrayList;_x000D_foreach ($message in $Messages)_x000D_{_x000D_ $result = New-object messageData_x000D_ $result.DateTime=Get-Date -Date (($message).createdDateTime) -Format 'yyyy/MM/dd HH:mm'_x000D_ $result.from = $message.from.user.displayName_x000D_ $result.body = $message.body.content_x000D_ $messageSet.Add($result)_x000D_ #parsing replies_x000D_ $repliesURI = "https://graph.microsoft.com/beta/teams/" + $TeamsID + "/channels/" + $ChannelID + "/messages/" + $message.ID + "/replies?`$top100"_x000D_ $repliesResponse = Invoke-RestMethod -Method Get -Uri $repliesURI -Headers $header_x000D_ foreach ($reply in $repliesResponse.value)_x000D_ {_x000D_ $replyData = New-Object messageData_x000D_ $replyData.dateTime = Get-Date -Date (($reply).createdDateTime) -Format 'yyyy/MM/dd HH:mm'_x000D_ $replyData.from = $reply.from.user.displayName_x000D_ $replyData.body= $reply.body.content_x000D_ $replyData.re="RE"_x000D_ $messageSet.Add($replyData)_x000D_ } _x000D_}_x000D_$messageSet|ConvertTo-Html | Out-File c:psteams_chat_history.html -Encoding utf8_x000D_
Этот скрипт получает список обсуждений из указанного канала, для каждого обсуждения получает список ответов и формирует HTML файл с полным содержимым чата. Ответы на обсуждения в таблице содержат ключевое поле RE.
Полный код доступен в нашем репозитории на GitHub: https://github.com/winadm/posh/blob/master/teams/teams_chat_export_msgs.ps1
Если говорить о том, какие лучшие дистрибутивы Linux мы знаем, то этот список может быть…
Хотя Ubuntu и поставляется со встроенным обозревателем Firefox многие пользователи считают что это не самая…
Что такое Remmina? Remmina — это совершенно бесплатный и свободный клиент так называемого удаленного рабочего…
Как мы знаем, Ubuntu это самая популярная сборка из систем на базе ядра Linux. У…
Выбор ноутбука для каждого пользователя это довольно кропотливый процесс. Люди стараются подобрать ноутбук который будет…
Если вы решили ознакомиться с операционной системой Linux более детально и задались вопросом как установить…