Neste artigo, veremos como acessar e exportar o histórico de conversas de bate-papo do Microsoft Teams usando o PowerShell.
Os bate-papos das equipes são armazenados em um local oculto Histórico de conversas\Bate-papo em equipe pasta em um caixa de correio compartilhada, que é criado automaticamente quando você cria um novo grupo do Microsoft 365 (isso criará instantaneamente um grupo do Teams, um site, uma biblioteca do SharePoint Online, um grupo do Yammer, etc.).
No entanto, você não pode acessar a pasta protegida com um histórico de bate-papo do Teams usando o Outlook ou outro aplicativo. Você pode exportar o conteúdo de uma caixa de correio do Exchange Online para um arquivo PST usando Pesquisa de conteúdono Security and Compliance Center e conecte o arquivo PST no Outlook. Mas não é muito conveniente. É muito mais fácil usar o PowerShell para obter uma lista de mensagens de bate-papo do Teams.
Para se conectar a um locatário do Microsoft 365, usaremos a API do Microsoft Graph.
- Crie um novo appTeamsView app no Portal do Azure (Azure AD -> Registro do aplicativo -> Novo registro);
- Copie os seguintes valores:
ID do aplicativo (cliente):your_app_ID
ID do diretório (locatário):your_tenant_ID
- Vá para Permissões de API, clique em Microsoft Graph -> Permissões de aplicativo -> Canal -> selecione Canal. Básico. Leia tudo e Mensagem do canal. Ler.Todos. Adicione o grupo de permissão -> Grupo. Ler. Todos. Conceda as mesmas permissões em Microsoft Graph -> Permissões delegadas e também em Diretório. AccessAsUser. Todos.
- Clique Conceda consentimento de administrador para…
- Em seguida, crie um segredo para acessar o aplicativo. Vá para Certificados e segredos -> Novos segredos do cliente, especifique o nome da chave e seu período de validade.
Copie o valor do Valor campo:
Valor:your_secret
Em seguida, você pode conectar-se ao Microsoft Entra ID (Azure AD) do PowerShell e obter um token de acesso.
$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.
Agora você pode obter vários dados do seu locatário do Microsoft 365.
Liste as equipes em seu locatário:
#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.
Em seguida, exiba uma lista de canais no grupo Teams por seu ID:
# 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
Você pode usar o seguinte script do PowerShell para obter uma lista de mensagens e respostas do canal 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.
Este script obtém uma lista de conversas do canal especificado, obtém uma lista de respostas para cada conversa e gera um arquivo HTML com o conteúdo completo do chat. As respostas à discussão na tabela contêm o campo-chave RE
.
Confira nosso repositório GitHub para este código de script: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1