ในบทความนี้ เราจะดูวิธีเข้าถึงและส่งออกประวัติการสนทนาของ Microsoft Teams โดยใช้ PowerShell
การแชทของทีมจะถูกจัดเก็บไว้ในที่ซ่อน ประวัติการสนทนา\การแชทในทีม โฟลเดอร์ใน กล่องจดหมายที่ใช้ร่วมกันซึ่งจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณสร้างกลุ่ม Microsoft 365 ใหม่ (ซึ่งจะสร้างกลุ่ม Teams เว็บไซต์ ไลบรารี SharePoint Online กลุ่ม Yammer ฯลฯ ทันที)
อย่างไรก็ตาม คุณไม่สามารถเข้าถึงโฟลเดอร์ที่ได้รับการป้องกันด้วยประวัติการแชทของทีมโดยใช้ Outlook หรือแอปอื่น คุณสามารถ ส่งออกเนื้อหาของกล่องจดหมาย Exchange Online ไปยังไฟล์ PST โดยใช้ ค้นหาเนื้อหาใน ศูนย์ความปลอดภัยและการปฏิบัติตามกฎระเบียบ จากนั้นเชื่อมต่อไฟล์ PST ใน Outlook แต่มันไม่สะดวกเกินไป การใช้ PowerShell เพื่อรับรายการข้อความแชทของทีมทำได้ง่ายกว่ามาก
หากต้องการเชื่อมต่อกับผู้เช่า Microsoft 365 เราจะใช้ Microsoft Graph API
- สร้างใหม่ แอพ TeamsView แอปใน Azure Portal (Azure AD -> การลงทะเบียนแอป -> การลงทะเบียนใหม่);
- คัดลอกค่าต่อไปนี้:
รหัสแอปพลิเคชัน (ไคลเอนต์):your_app_ID
รหัสไดเรกทอรี (ผู้เช่า):your_tenant_ID
- ไปที่การอนุญาต API คลิก Microsoft Graph -> การอนุญาตของแอปพลิเคชัน -> ช่องทาง -> เลือก ช่อง. ขั้นพื้นฐาน. อ่านทั้งหมด และ ข้อความช่อง. อ่าน.ทั้งหมด. เพิ่มกลุ่มการอนุญาต -> กลุ่ม. อ่าน. ทั้งหมด. ให้สิทธิ์เดียวกันใน Microsoft Graph -> สิทธิ์ที่ได้รับมอบหมายและยังมาด้วย ไดเรกทอรี การเข้าถึง AsUser ทั้งหมด.
- คลิก ให้ความยินยอมของผู้ดูแลระบบสำหรับ...
- จากนั้นสร้างความลับเพื่อเข้าถึงแอป ไปที่ ใบรับรองและความลับ -> ความลับของลูกค้าใหม่ระบุชื่อคีย์และระยะเวลาที่มีผลบังคับใช้
คัดลอกค่าจาก ค่า สนาม:
ค่า:your_secret
จากนั้นคุณสามารถเชื่อมต่อกับ Microsoft Entra ID (Azure AD) จาก PowerShell และรับโทเค็นการเข้าถึงได้
$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.
ตอนนี้คุณสามารถรับข้อมูลต่างๆ จากผู้เช่า Microsoft 365 ของคุณได้แล้ว
รายชื่อทีมในผู้เช่าของคุณ:
#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.
จากนั้นแสดงรายการช่องทางในกลุ่มทีมตามรหัส:
# 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 ต่อไปนี้เพื่อรับรายการข้อความและการตอบกลับจากช่องทาง 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.
สคริปต์นี้รับรายการการสนทนาจากช่องทางที่ระบุ รับรายการตอบกลับสำหรับแต่ละการสนทนา และสร้างไฟล์ HTML พร้อมเนื้อหาทั้งหมดของแชท การตอบกลับการอภิปรายในตารางประกอบด้วยฟิลด์สำคัญ RE
.
ตรวจสอบพื้นที่เก็บข้อมูล GitHub ของเราสำหรับโค้ดสคริปต์นี้: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1