PowerShell を使用して MS Teams チャット履歴をエクスポートする方法

Admin

この記事では、PowerShell を使用して Microsoft Teams チャットの会話履歴にアクセスし、エクスポートする方法を見ていきます。

Teams チャットは非表示に保存されます 会話履歴\チームチャット 内のフォルダー 共有メールボックスこれは、新しい Microsoft 365 グループを作成すると自動的に作成されます (これにより、Teams グループ、Web サイト、SharePoint Online ライブラリ、Yammer グループなどが即座に作成されます)。

あなたはできる Microsoft 365 テナントのユーザーが新しい Teams グループを作成できないようにする.

ただし、Outlook や別のアプリを使用して、Teams のチャット履歴のある保護されたフォルダーにアクセスすることはできません。 あなたはできる Exchange Online メールボックスの内容を PST ファイルにエクスポートする 使用して コンテンツ検索の中に セキュリティとコンプライアンス センターにアクセスし、Outlook で PST ファイルを接続します。 しかし、あまり便利ではありません。 PowerShell を使用すると、Teams チャット メッセージのリストを取得する方がはるかに簡単です。

Microsoft 365 テナントに接続するには、Microsoft Graph API を使用します。

前回、その方法をご紹介しましたが、 PowerShell を使用して MS Teams チャットにメッセージを送信する Microsoft Graph API。
  1. 新しいを作成します アプリチームビュー Azure Portal のアプリ (Azure AD -> アプリ登録 -> 新規登録)。
  2. 次の値をコピーします。
    アプリケーション(クライアント)ID: your_app_ID
    ディレクトリ(テナント)ID: your_tenant_ID
  3. [API アクセス許可] に移動し、[Microsoft Graph] -> [アプリケーションのアクセス許可] -> [チャネル] -> [選択] の順にクリックします。 チャネル。 基本。 すべて読む そして チャンネルメッセージ。 読む.全て. 権限グループを追加 -> グループ。 読む。 全て。 同じ権限を付与します Microsoft Graph -> 委任されたアクセス許可、および ディレクトリ。 ユーザーとしてアクセスします。 全て。
  4. クリック 管理者の同意を与える…Azure でアプリにアクセス許可を付与する
  5. 次に、アプリにアクセスするためのシークレットを作成します。 に行く 証明書と秘密 -> 新しいクライアントシークレット、キー名とその有効期間を指定します。
    から値をコピーします。 価値 分野:
    価値: your_secret
Azure アプリのシークレットを作成する
詳しくはこちら Microsoft Graph API を PowerShell に接続する方法.

その後、PowerShell から Microsoft Entra ID (Azure AD) に接続し、アクセス トークンを取得できます。

$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 の証明書ベースの認証 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 グループ内のチャネルのリストを ID 別に表示します。

# 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: チーム内のチャネルを一覧表示する

次の 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

PowerShell を使用して Microsoft Teams チャットを HTML にエクスポートする

PowerShell を使用して Teams ユーザーのプレゼンス ステータスをクエリおよび変更する方法
PowerShell を使用して Teams ユーザーのプレゼンス ステータスをクエリおよび変更する方法

一部の統合スクリプトで特定のアクションを実行する前に、Microsoft Teams でのユーザーのプレゼンス ステータス (オンライン/退席中/取り込み中) を確認する必要がある場合があります...

PowerShell を使用して MS Teams チャット履歴をエクスポートする方法
PowerShell を使用して MS Teams チャット履歴をエクスポートする方法

この記事では、PowerShell を使用して Microsoft Teams チャットの会話履歴にアクセスし、エクスポートする方法を見ていきます。Teams チャットは非表示に保存されます 会...