PowerShell ile MS Teams Sohbet Geçmişini Dışa Aktarma


Bu makalede, PowerShell kullanarak Microsoft Teams sohbet konuşmalarının geçmişine nasıl erişilip dışarı aktarılacağına bakacağız.

Teams sohbetleri, yeni bir Microsoft 365 grubu oluşturduğunuzda otomatik olarak oluşturulan, paylaşılan bir posta kutusundaki gizli bir Konuşma geçmişi\Takım Sohbeti klasöründe depolanır (bu, anında bir Teams grubu, bir web sitesi, bir SharePoint Online kitaplığı, Yammer grubu vb.).

Microsoft 365 kiracısı kullanıcılarının yeni Teams grupları oluşturmasını engelleyebilirsiniz.

Ancak Teams sohbet geçmişinin bulunduğu korumalı klasöre Outlook veya başka bir uygulamayı kullanarak erişemezsiniz. Exchange Online posta kutusunun içeriğini, Güvenlik ve Uyumluluk Merkezi'ndeki İçerik Arama'yı kullanarak bir PST dosyasına aktarabilir ve ardından PST dosyasını Outlook'a bağlayabilirsiniz. Ancak çok uygun değil. Teams sohbet mesajlarının bir listesini almak için PowerShell'i kullanmak çok daha kolaydır.

Bir Microsoft 365 kiracısına bağlanmak için Microsoft Graph API'sini kullanacağız.

Daha önce size PowerShell ve Microsoft Graph API'sini kullanarak MS Teams sohbetine nasıl mesaj göndereceğinizi göstermiştik.

  1. Azure Portal'da yeni bir appTeamsView uygulaması oluşturun (Azure AD -> Uygulama kaydı -> Yeni kayıt);

  2. Aşağıdaki değerleri kopyalayın:
    Uygulama (istemci) kimliği:

    your_app_ID

    Dizin (kiracı) kimliği:

    your_tenant_ID
  3. API İzinleri'ne gidin, Microsoft Graph -> Uygulama izinleri -> Kanal'ı tıklayın -> Channel.Basic.ReadAll ve ChannelMessage.Read'i seçin.Tümü . Grup -> Grup.Oku.Tümünü iznini ekleyin. Aynı izinleri Microsoft Graph -> Yetki verilen izinler ve ayrıca Directory.AccessAsUser.All'da verin.

  4. Şunun için Yönetici Onayı Ver'i tıklayın:

  5. Ardından uygulamaya erişmek için bir sır oluşturun. Sertifikalar ve sırlar -> Yeni istemci sırları'na gidin, anahtar adını ve geçerlilik süresini belirtin.
    Değer 'den değeri kopyalayın. alan:
    Değer:

    your_secret

Microsoft Graph API'yi PowerShell'e nasıl bağlayacağınız hakkında daha fazla bilgi edinin.

Daha sonra PowerShell'den Microsoft Entra ID'ye (Azure AD) bağlanıp bir erişim belirteci alabilirsiniz.

$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'te sertifika tabanlı kimlik doğrulamasını PowerShell betiğinizden kullanabilirsiniz.

Artık Microsoft 365 kiracınızdan çeşitli veriler alabilirsiniz.

Kiracınızdaki Ekipleri listeleyin:

#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

Ardından Teams grubundaki kanalların listesini kimliğine göre görüntüleyin:

# 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

Teams kanalından gelen mesajların ve yanıtların listesini almak için aşağıdaki PowerShell betiğini kullanabilirsiniz:

$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

Bu komut dosyası, belirtilen kanaldan konuşmaların bir listesini alır, her konuşma için yanıtların bir listesini alır ve sohbetin tüm içeriğini içeren bir HTML dosyası oluşturur. Tablodaki tartışmaya verilen yanıtlar anahtar alanı içerir

RE

Bu komut dosyası kodu için GitHub depomuza göz atın: https://github.com/maxbakhub/winposh/blob/main/teams/export_messages_teams_chat.ps1

İlgili makaleler