ค้นหาเว็บไซต์

วิธีส่งออกประวัติการแชทของทีม 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

  1. สร้างแอป appTeamsView ใหม่ในพอร์ทัล Azure (Azure AD -> การลงทะเบียนแอป -> การลงทะเบียนใหม่)

  2. คัดลอกค่าต่อไปนี้:
    ID แอปพลิเคชัน (ไคลเอ็นต์):

    your_app_ID

    รหัสไดเรกทอรี (ผู้เช่า):

    your_tenant_ID
  3. ไปที่การอนุญาต API คลิก Microsoft Graph -> การอนุญาตของแอปพลิเคชัน -> Channel -> เลือก Channel.Basic.ReadAll และ ChannelMessage.Read.ทั้งหมด . เพิ่มการอนุญาต Group -> Group.Read.All ให้สิทธิ์เดียวกันใน Microsoft Graph -> สิทธิ์ที่ได้รับมอบหมาย และใน Directory.AccessAsUser.All

  4. คลิก ให้สิทธิ์ผู้ดูแลระบบสำหรับ...

  5. จากนั้นสร้างความลับเพื่อเข้าถึงแอป ไปที่ ใบรับรองและความลับ -> ความลับของลูกค้าใหม่ ระบุชื่อคีย์และระยะเวลาที่ใช้งานได้
    คัดลอกค่าจาก ค่า ฟิลด์:
    ค่า:

    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

บทความที่เกี่ยวข้อง