En este artículo, veremos cómo acceder y exportar el historial de conversaciones de chat de Microsoft Teams usando PowerShell.
Los chats de Teams se almacenan en un lugar oculto. Historial de conversaciones\Chat de equipo carpeta en un buzón compartido, que se crea automáticamente cuando crea un nuevo grupo de Microsoft 365 (esto creará instantáneamente un grupo de Teams, un sitio web, una biblioteca de SharePoint Online, un grupo de Yammer, etc.).
Sin embargo, no puede acceder a la carpeta protegida con un historial de chat de Teams usando Outlook u otra aplicación. Puede exportar el contenido de un buzón de Exchange Online a un archivo PST usando Búsqueda de contenidoen el Centro de seguridad y cumplimiento y luego conecte el archivo PST en Outlook. Pero no es demasiado conveniente. Es mucho más fácil usar PowerShell para obtener una lista de mensajes de chat de Teams.
Para conectarnos a un inquilino de Microsoft 365, usaremos la API de Microsoft Graph.
- Crear un nuevo aplicaciónEquiposVer aplicación en el Portal de Azure (Azure AD -> Registro de aplicación -> Nuevo registro);
- Copie los siguientes valores:
ID de la aplicación (cliente):your_app_ID
ID del directorio (inquilino):your_tenant_ID
- Vaya a Permisos de API, haga clic en Microsoft Graph -> Permisos de aplicación -> Canal -> seleccione Canal. Básico. Lee todo y Mensaje de canal. Leer.Todo. Agregue el grupo de permisos -> Grupo. Leer. Todo. Conceder los mismos permisos en Microsoft Graph -> Permisos delegados y también en Directorio. AccesoComoUsuario. Todo.
- Hacer clic Conceder el consentimiento del administrador para...
- Luego crea un secreto para acceder a la aplicación. Ir a Certificados y secretos -> Nuevos secretos de clientes, especifique el nombre de la clave y su período de validez.
Copie el valor del Valor campo:
Valor:your_secret
Luego puede conectarse a Microsoft Entra ID (Azure AD) desde PowerShell y obtener un token de acceso.
$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.
Ahora puede obtener varios datos de su inquilino de Microsoft 365.
Enumere los equipos en su inquilino:
#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.
Luego muestre una lista de canales en el grupo Teams por su 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
Puede utilizar el siguiente script de PowerShell para obtener una lista de mensajes y respuestas del canal de 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 obtiene una lista de conversaciones del canal especificado, obtiene una lista de respuestas para cada conversación y genera un archivo HTML con el contenido completo del chat. Las respuestas a la discusión en la tabla contienen el campo clave RE
.
Consulte nuestro repositorio de GitHub para ver este código de script: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1