วิธีส่งออกประวัติการแชทของทีม MS ด้วย PowerShell
ในบทความนี้ เราจะดูวิธีเข้าถึงและส่งออกประวัติการสนทนาของ Microsoft Teams โดยใช้ PowerShell
การแชทในทีมจะถูกจัดเก็บไว้ในโฟลเดอร์ ประวัติการสนทนา\การแชทในทีม ที่ซ่อนอยู่ในกล่องจดหมายที่ใช้ร่วมกัน ซึ่งจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณสร้างกลุ่ม Microsoft 365 ใหม่ (ซึ่งจะสร้างกลุ่ม Teams เว็บไซต์ และ ไลบรารี SharePoint Online, กลุ่ม Yammer ฯลฯ)
คุณสามารถป้องกันไม่ให้ผู้ใช้ของผู้เช่า Microsoft 365 สร้างกลุ่ม Teams ใหม่ได้
อย่างไรก็ตาม คุณไม่สามารถเข้าถึงโฟลเดอร์ที่ได้รับการป้องกันด้วยประวัติการแชทของทีมโดยใช้ Outlook หรือแอปอื่น คุณสามารถส่งออกเนื้อหาของกล่องจดหมาย Exchange Online ไปยังไฟล์ PST ได้โดยใช้ การค้นหาเนื้อหา ในศูนย์ความปลอดภัยและการปฏิบัติตามข้อกำหนด จากนั้นเชื่อมต่อไฟล์ PST ใน Outlook แต่มันไม่สะดวกเกินไป การใช้ PowerShell เพื่อรับรายการข้อความแชทของทีมทำได้ง่ายกว่ามาก
หากต้องการเชื่อมต่อกับผู้เช่า Microsoft 365 เราจะใช้ Microsoft Graph API
ก่อนหน้านี้ เราได้แสดงวิธีส่งข้อความไปยังแชท MS Teams โดยใช้ PowerShell และ Microsoft Graph API
สร้างแอป appTeamsView ใหม่ในพอร์ทัล Azure (Azure AD -> การลงทะเบียนแอป -> การลงทะเบียนใหม่)
คัดลอกค่าต่อไปนี้:
ID แอปพลิเคชัน (ไคลเอ็นต์):your_app_IDรหัสไดเรกทอรี (ผู้เช่า):
your_tenant_IDไปที่การอนุญาต API คลิก Microsoft Graph -> การอนุญาตของแอปพลิเคชัน -> Channel -> เลือก Channel.Basic.ReadAll และ ChannelMessage.Read.ทั้งหมด . เพิ่มการอนุญาต Group -> Group.Read.All ให้สิทธิ์เดียวกันใน Microsoft Graph -> สิทธิ์ที่ได้รับมอบหมาย และใน Directory.AccessAsUser.All
คลิก ให้สิทธิ์ผู้ดูแลระบบสำหรับ...
จากนั้นสร้างความลับเพื่อเข้าถึงแอป ไปที่ ใบรับรองและความลับ -> ความลับของลูกค้าใหม่ ระบุชื่อคีย์และระยะเวลาที่ใช้งานได้
คัดลอกค่าจาก ค่า ฟิลด์:
ค่า:your_secret
เรียนรู้เพิ่มเติมเกี่ยวกับวิธีเชื่อมต่อ Microsoft Graph API กับ PowerShell
จากนั้นคุณสามารถเชื่อมต่อกับ Microsoft Entra ID (Azure AD) จาก PowerShell และรับโทเค็นการเข้าถึงได้
$clientId = "your_app_ID"
$tenantName = "yourtenant.onmicrosoft.com"
$clientSecret = "your_secret"
$resource = "https://graph.microsoft.com/"
$Username = "[email "
$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 จากสคริปต์ PowerShell ของคุณ
ตอนนี้คุณสามารถรับข้อมูลต่างๆ จากผู้เช่า 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



