Как экспортировать историю чата MS Teams с помощью PowerShell

Admin

В этой статье мы рассмотрим, как получить доступ к истории разговоров в чате Microsoft Teams и экспортировать ее с помощью PowerShell.

Чаты Teams хранятся в скрытом История разговоров\Командный чат папка в общий почтовый ящик, который автоматически создается при создании новой группы Microsoft 365 (при этом мгновенно создается группа Teams, веб-сайт, библиотека SharePoint Online, группа Yammer и т. д.).

Ты можешь запретить пользователям клиента Microsoft 365 создавать новые группы Teams.

Однако вы не можете получить доступ к защищенной папке с историей чата Teams с помощью Outlook или другого приложения. Ты можешь экспортировать содержимое почтового ящика Exchange Online в PST-файл с использованием Поиск контентав Центр безопасности и соответствия требованиям, а затем подключите PST-файл в Outlook. Но это не слишком удобно. Гораздо проще использовать PowerShell для получения списка сообщений чата Teams.

Для подключения к арендатору Microsoft 365 мы будем использовать API Microsoft Graph.

Ранее мы показали вам, как
отправить сообщение в чат MS Teams с помощью PowerShell и API Microsoft Graph.
  1. Создать новый приложениеTeamsView приложение на портале Azure (Azure AD -> Регистрация приложения -> Новая регистрация);
  2. Скопируйте следующие значения:
    Идентификатор приложения (клиента): your_app_ID
    Идентификатор каталога (клиента): your_tenant_ID
  3. Перейдите в раздел «Разрешения API», нажмите Microsoft Graph -> Разрешения приложения -> Канал -> выберите. Канал. Базовый. Читать все и КаналСообщение. Читать.Все. Добавьте группу разрешений -> Группа. Читать. Все. Предоставьте те же разрешения в Microsoft Graph -> Делегированные разрешения, а также в Каталог. ДоступКакПользователь. Все.
  4. Нажмите Предоставить согласие администратора для…Предоставление разрешений приложениям в Azure
  5. Затем создайте секрет для доступа к приложению. Идти к Сертификаты и секреты -> Новые секреты клиентов, укажите имя ключа и срок его действия.
    Скопируйте значение из Ценить поле:
    Ценить: your_secret
Создать секрет для приложения Azure
Узнать больше о как подключить API Microsoft Graph к PowerShell.

Затем вы можете подключиться к Microsoft Entra ID (Azure AD) из PowerShell и получить токен доступа.

$clientId = "your_app_ID"
$tenantName = "yourtenant.onmicrosoft.com"
$clientSecret = "your_secret"
$resource = "https://graph.microsoft.com/"
$Username = "[email protected]"
$Password = "yourpassword"
$ReqTokenBody = @{ Grant_Type = "Password" client_Id = $clientID Client_Secret = $clientSecret Username = $Username Password = $Password Scope = "https://graph.microsoft.com/.default"
}
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody. 
Вы можете использовать проверка подлинности на основе сертификатов в Microsoft 365 из вашего сценария PowerShell.

Теперь вы можете получать различные данные от вашего клиента Microsoft 365.

Перечислите команды в вашем клиенте:

#Getting all Teams. $header= @{Authorization = "Bearer $($TokenResponse.access_token)"}
$BaseURI = "https://graph.microsoft.com/beta"
$AllMicrosoftTeams = (Invoke-RestMethod -Uri "$($BaseURI)/groups?'$filter=resourceProvisioningOptions/Any(x: x eq 'Team')" -Headers $header -Method Get -ContentType "application/json").value. $AllMicrosoftTeams| FT id, DisplayName, Description. 

Затем отобразите список каналов в группе Teams по ее идентификатору:

# List channels in Team. $TeamsID="your_team_id"
$TeamsChannels = (Invoke-RestMethod -Uri "$($BaseURI)/teams/$($TeamsID)/channels" -Headers $Header -Method Get -ContentType "application/json").value. $TeamsChannels | FT id, DisplayName, Description
PowerShell: список каналов в команде

Вы можете использовать следующий сценарий PowerShell, чтобы получить список сообщений и ответов из канала Teams:

$ChannelID="your_chat_id "
$Header =@{Authorization = "Bearer $($Tokenresponse.access_token)"} $apiUrl = "https://graph.microsoft.com/beta/teams/$TeamsID/channels/$ChannelID/messages"
$Data = Invoke-RestMethod -Uri $apiUrl -Headers $header -Method Get. $Messages = ($Data | Select-Object Value).Value. 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 = New-object messageData $result.DateTime=Get-Date -Date (($message).createdDateTime) -Format 'yyyy/MM/dd HH: mm' $result.from = $message.from.user.displayName $result.body = $message.body.content $messageSet.Add($result) #parsing replies $repliesURI = "https://graph.microsoft.com/beta/teams/" + $TeamsID + "/channels/" + $ChannelID + "/messages/" + $message.ID + "/replies?`$top100" $repliesResponse = Invoke-RestMethod -Method Get -Uri $repliesURI -Headers $header foreach ($reply in $repliesResponse.value) { $replyData = New-Object messageData $replyData.dateTime = Get-Date -Date (($reply).createdDateTime) -Format 'yyyy/MM/dd HH: mm' $replyData.from = $reply.from.user.displayName $replyData.body= $reply.body.content $replyData.re="RE" $messageSet.Add($replyData) } }
$messageSet|ConvertTo-Html | Out-File c:\ps\teams_chat_history.html -Encoding utf8. 

Этот скрипт получает список разговоров из указанного канала, получает список ответов для каждого разговора и генерирует HTML-файл с полным содержимым чата. Ответы на обсуждение в таблице содержат ключевое поле RE.

Проверьте наш репозиторий GitHub для этого кода сценария: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1

Экспорт чата Microsoft Teams в HTML с помощью PowerShell

Как отправить сообщение на канал Teams с помощью PowerShell
Как отправить сообщение на канал Teams с помощью PowerShell

Вы можете отправлять сообщения в каналы Teams из PowerShell с помощью веб-перехватчиков или вызов...

Управление Microsoft Teams с помощью PowerShell
Управление Microsoft Teams с помощью PowerShell

Команды Майкрософт Модуль PowerShell предназначен для управления Teams из командной строки. Вы м...

Как запросить и изменить статус присутствия пользователя Teams с помощью PowerShell
Как запросить и изменить статус присутствия пользователя Teams с помощью PowerShell

Может потребоваться проверить статус присутствия пользователя (в сети/отсутствует/занят) в Micros...