في هذه المقالة، سنلقي نظرة على كيفية الوصول إلى سجل محادثات دردشة Microsoft Teams وتصديره باستخدام PowerShell.
يتم تخزين محادثات الفرق بشكل مخفي سجل المحادثات\دردشة الفريق مجلد في صندوق البريد المشترك، والتي يتم إنشاؤها تلقائيًا عند إنشاء مجموعة Microsoft 365 جديدة (سيؤدي ذلك على الفور إلى إنشاء مجموعة Teams، وموقع ويب، ومكتبة SharePoint Online، ومجموعة Yammer، وما إلى ذلك).
ومع ذلك، لا يمكنك الوصول إلى المجلد المحمي باستخدام محفوظات دردشة Teams باستخدام Outlook أو تطبيق آخر. أنت تستطيع تصدير محتويات صندوق بريد Exchange Online إلى ملف PST استخدام بحث المحتوىفي ال مركز الأمان والتوافق ثم قم بتوصيل ملف PST في Outlook. لكنها ليست مريحة للغاية. من الأسهل كثيرًا استخدام PowerShell للحصول على قائمة برسائل دردشة Teams.
للاتصال بمستأجر Microsoft 365، سنستخدم Microsoft Graph API.
- إنشاء جديد appTeamsView التطبيق في مدخل Azure (Azure AD -> تسجيل التطبيق -> تسجيل جديد)؛
- انسخ القيم التالية:
معرف التطبيق (العميل):your_app_ID
معرف الدليل (المستأجر):your_tenant_ID
- انتقل إلى أذونات واجهة برمجة التطبيقات (API)، وانقر فوق Microsoft Graph -> أذونات التطبيق -> القناة -> حدد قناة. أساسي. اقرأ كل شيء و رسالة القناة. يقرأ.الجميع. أضف مجموعة الأذونات -> مجموعة. يقرأ. الجميع. منح نفس الأذونات في Microsoft Graph -> الأذونات المفوضة وأيضًا في الدليل. AccessAsUser. الجميع.
- انقر منح موافقة المشرف لـ...
- ثم قم بإنشاء سر للوصول إلى التطبيق. اذهب إلى الشهادات والأسرار -> أسرار العميل الجديد، حدد اسم المفتاح وفترة صلاحيته.
انسخ القيمة من قيمة مجال:
قيمة:your_secret
ثم يمكنك الاتصال بمعرف Microsoft Entra (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.
ثم قم بعرض قائمة القنوات في مجموعة 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
يمكنك استخدام البرنامج النصي 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