כיצד לייצא היסטוריית צ'אט של MS Teams באמצעות PowerShell


במאמר זה, נבחן כיצד לגשת להיסטוריה של שיחות צ'אט של Microsoft Teams ולייצא אותן באמצעות PowerShell.

צ'אטים של Teams מאוחסנים בתיקיה מוסתרת של היסטוריית שיחות\צ'אט צוות בתיבת דואר משותפת, אשר נוצרת באופן אוטומטי בעת יצירת קבוצה חדשה של Microsoft 365 (פעולה זו תיצור באופן מיידי קבוצת Teams, אתר אינטרנט, ספריית SharePoint Online, קבוצת Yammer וכן הלאה.).

באפשרותך למנוע ממשתמשים בדייר Microsoft 365 ליצור קבוצות Teams חדשות.

עם זאת, אין באפשרותך לגשת לתיקיה המוגנת באמצעות היסטוריית צ'אט של Teams באמצעות Outlook או אפליקציה אחרת. באפשרותך לייצא את התוכן של תיבת דואר של Exchange Online לקובץ PST באמצעות חיפוש תוכן במרכז האבטחה והתאימות ולאחר מכן לחבר את קובץ ה- PST ב- Outlook. אבל זה לא נוח מדי. הרבה יותר קל להשתמש ב- PowerShell כדי לקבל רשימה של הודעות צ'אט של Teams.

כדי להתחבר לדייר Microsoft 365, נשתמש ב- API של Microsoft Graph.

בעבר, הראינו לך כיצד לשלוח הודעה לצ'אט של MS Teams באמצעות PowerShell ו- Microsoft Graph API.

  1. יצירת יישום חדשTeamsView בפורטל Azure (Azure AD -> רישום אפליקציה -> רישום חדש);

  2. העתק את הערכים הבאים:מזהה יישום
    (לקוח):

    your_app_ID

    מזהה ספריה (דייר):

    your_tenant_ID
  3. עבור אל הרשאות API, לחץ על Microsoft Graph -> הרשאות יישום -> ערוץ -> בחר Channel.Basic.ReadAll ו- ChannelMessage.Read.הכל. הוסף את ההרשאה Group -> Group.Read.All. הענק את אותן הרשאות ב- Microsoft Graph -> הרשאות מוקצות וגם ב- Directory.AccessAsUser.All.

  4. לחץ על הענק הסכמת מנהל מערכת עבור...

  5. לאחר מכן צור סוד כדי לגשת ליישום. עבור אל אישורים וסודות -> סודות לקוח חדש, ציין את שם המפתח ואת תקופת התוקף שלו.
    ערך:
    ערך:

    your_secret

קבל מידע נוסף על אופן החיבור של Microsoft Graph API עם PowerShell.

לאחר מכן תוכל להתחבר למזהה Microsoft Entra (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 מתוך קובץ ה- Script של 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

לאחר מכן הצג רשימת ערוצים בקבוצה Teams לפי המזהה שלה:

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

באפשרותך להשתמש בקובץ ה- Script הבא של 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