Cómo exportar el historial de chat de MS Teams con PowerShell

Admin

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.).

Puede evitar que los usuarios del inquilino de Microsoft 365 creen nuevos grupos de Teams.

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.

Anteriormente, le mostramos cómo enviar un mensaje a un chat de MS Teams usando PowerShell y la API de Microsoft Graph.
  1. Crear un nuevo aplicaciónEquiposVer aplicación en el Portal de Azure (Azure AD -> Registro de aplicación -> Nuevo registro);
  2. Copie los siguientes valores:
    ID de la aplicación (cliente): your_app_ID
    ID del directorio (inquilino): your_tenant_ID
  3. 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.
  4. Hacer clic Conceder el consentimiento del administrador para...Conceder permisos a aplicaciones en Azure
  5. 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
Crear secreto para la aplicación de Azure
Aprender más acerca de cómo conectar Microsoft Graph API con PowerShell.

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. 
Puedes usar autenticación basada en certificados en Microsoft 365 desde su secuencia de comandos de PowerShell.

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
PowerShell: enumerar canales en un equipo

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

Exportar chat de Microsoft Teams a html con PowerShell

Cómo deshabilitar el inicio automático de Microsoft Teams
Cómo deshabilitar el inicio automático de Microsoft Teams

De manera predeterminada, cuando instala Office 365/Office 2019, se instalan todas las aplicacion...

Cómo enviar un mensaje al canal de Teams con PowerShell
Cómo enviar un mensaje al canal de Teams con PowerShell

Puede enviar mensajes a los canales de Teams desde PowerShell mediante webhook o llamadas a la AP...

Administrar equipos de Microsoft con PowerShell
Administrar equipos de Microsoft con PowerShell

El Equipos de Microsoft El módulo PowerShell está diseñado para administrar Teams desde la línea ...