W tym artykule przyjrzymy się, jak uzyskać dostęp do historii rozmów na czacie w aplikacji Microsoft Teams i ją wyeksportować za pomocą programu PowerShell.
Czaty zespołów są przechowywane w ukrytym pliku Historia rozmów\Czat zespołu folder w A wspólna skrzynka pocztowa, która jest tworzona automatycznie podczas tworzenia nowej grupy Microsoft 365 (spowoduje to natychmiastowe utworzenie grupy Teams, witryny internetowej, biblioteki SharePoint Online, grupy Yammer itp.).
Nie można jednak uzyskać dostępu do chronionego folderu za pomocą historii czatów w aplikacji Teams przy użyciu programu Outlook lub innej aplikacji. Możesz wyeksportuj zawartość skrzynki pocztowej Exchange Online do pliku PST za pomocą Wyszukiwanie treściw Centrum Bezpieczeństwa i Zgodności, a następnie podłącz plik PST w programie Outlook. Ale nie jest to zbyt wygodne. O wiele łatwiej jest korzystać z programu PowerShell, aby uzyskać listę wiadomości czatu w aplikacji Teams.
Aby połączyć się z dzierżawcą Microsoft 365, użyjemy interfejsu API Microsoft Graph.
- Stwórz nowy aplikacjaTeamsView aplikacja w Azure Portal (Azure AD -> Rejestracja aplikacji -> Nowa rejestracja);
- Skopiuj następujące wartości:
Identyfikator aplikacji (klienta):your_app_ID
Identyfikator katalogu (dzierżawcy):your_tenant_ID
- Przejdź do Uprawnień API, kliknij Microsoft Graph -> Uprawnienia aplikacji -> Kanał -> wybierz Kanał. Podstawowy. Czytaj wszystko I Wiadomość kanału. Czytać.Wszystko. Dodaj uprawnienia Grupa -> Grupa. Czytać. Wszystko. Przyznaj te same uprawnienia w Microsoft Graph -> Delegowane uprawnienia, a także w Informator. Dostęp jako użytkownik. Wszystko.
- Kliknij Udziel zgody administratora na…
- Następnie utwórz klucz tajny, aby uzyskać dostęp do aplikacji. Iść do Certyfikaty i tajemnice -> Nowe tajemnice klienta, podaj nazwę klucza i okres jego ważności.
Skopiuj wartość z pliku Wartość pole:
Wartość:your_secret
Następnie możesz połączyć się z Microsoft Entra ID (Azure AD) z PowerShell i uzyskać token dostępu.
$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.
Teraz możesz uzyskać różne dane od dzierżawy Microsoft 365.
Lista zespołów w Twojej dzierżawie:
#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.
Następnie wyświetl listę kanałów w grupie Teams według ich identyfikatorów:
# 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
Aby uzyskać listę wiadomości i odpowiedzi z kanału Teams, możesz użyć następującego skryptu PowerShell:
$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.
Skrypt ten pobiera listę rozmów z określonego kanału, pobiera listę odpowiedzi dla każdej rozmowy i generuje plik HTML z pełną zawartością czatu. Odpowiedzi na dyskusję w tabeli zawierają pole klucza RE
.
Sprawdź nasze repozytorium GitHub, aby znaleźć ten kod skryptu: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1