Pada artikel ini, kita akan melihat cara mengakses dan mengekspor riwayat percakapan obrolan Microsoft Teams menggunakan PowerShell.
Obrolan tim disimpan secara tersembunyi Riwayat percakapan\Obrolan Tim folder di a kotak surat bersama, yang secara otomatis dibuat saat Anda membuat grup Microsoft 365 baru (ini akan langsung membuat grup Teams, situs web, pustaka SharePoint Online, grup Yammer, dll.).
Namun, Anda tidak dapat mengakses folder yang dilindungi dengan riwayat obrolan Teams menggunakan Outlook atau aplikasi lain. Kamu bisa mengekspor konten kotak surat Exchange Online ke file PST menggunakan Pencarian Kontendalam Pusat Keamanan dan Kepatuhan lalu sambungkan file PST di Outlook. Tapi itu sangat tidak nyaman. Jauh lebih mudah menggunakan PowerShell untuk mendapatkan daftar pesan obrolan Teams.
Untuk menyambung ke penyewa Microsoft 365, kami akan menggunakan Microsoft Graph API.
- Buat yang baru appTeamsView aplikasi di Portal Azure (Azure AD -> Pendaftaran aplikasi -> Pendaftaran baru);
- Salin nilai berikut:
ID Aplikasi (klien):your_app_ID
ID Direktori (penyewa):your_tenant_ID
- Buka Izin API, klik Microsoft Graph -> Izin aplikasi -> Saluran -> pilih Saluran. Dasar. Baca semua Dan Pesan Saluran. Membaca.Semua. Tambahkan izin Grup -> Kelompok. Membaca. Semua. Berikan izin yang sama di Microsoft Graph -> Izin yang didelegasikan dan juga masuk Direktori. Akses Sebagai Pengguna. Semua.
- Klik Berikan Persetujuan Admin untuk…
- Kemudian buat rahasia untuk mengakses aplikasi. Pergi ke Sertifikat & rahasia -> Rahasia klien baru, tentukan nama kunci dan masa berlakunya.
Salin nilai dari Nilai bidang:
Nilai:your_secret
Kemudian Anda dapat terhubung ke Microsoft Entra ID (Azure AD) dari PowerShell dan mendapatkan token akses.
$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.
Sekarang Anda bisa mendapatkan berbagai data dari penyewa Microsoft 365 Anda.
Cantumkan Tim di penyewa Anda:
#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.
Kemudian tampilkan daftar saluran di grup Teams berdasarkan ID-nya:
# 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
Anda bisa menggunakan skrip PowerShell berikut untuk mendapatkan daftar pesan dan balasan dari saluran 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.
Skrip ini mendapatkan daftar percakapan dari saluran yang ditentukan, mendapatkan daftar balasan untuk setiap percakapan, dan menghasilkan file HTML dengan konten obrolan lengkap. Balasan diskusi dalam tabel berisi bidang kunci RE
.
Lihat repositori GitHub kami untuk kode skrip ini: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1