MicrosoftTeams

GraphPowershellを使用して使用されていないチームを一括でアーカイブ化する

一定期間特定のアクティビティのないチームを、一括でアーカイブ化する方法について記載する。

確認する限り、いつアーカイブ状態になったかPowerShellから取得できない模様。
新たにアーカイブ状態になったチームを都度CSVファイルとして保存し、一定期間経ったら削除するような運用が良さそう。

当初、最終処理日のLast Activity Dateを使用して期間指定しようとしたが、
最終処理日の値が入っていないチームが複数あったため、内部アクティブユーザーを条件にアーカイブするようにした。

アーカイブ処理は非同期処理のため、コマンド実行から実際にアーカイブされるまでに時間がかかる可能性があります。

検証環境について

動作確認した検証環境は以下の通り。

OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0

GraphPowershellのモジュール名とバージョン
Microsoft.Graph.Authentication 2.11.1
Microsoft.Graph.Identity.DirectoryManagement 2.11.1

サインインアカウントの権限はグローバル管理者。

使用するコマンド

Get-MgReportTeamActivityDetail

使用例

Get-MgReportTeamActivityDetail -Period D30 -OutFile .\TeamActivityDetail.csv

取得できる情報例

Report Refresh Date,Team Id,Team Name,Last Activity Date,Team Type,Is Deleted,Report Period,Active Users,Active Channels,Channel Messages,Reactions,Meetings Organized,Post Messages,Reply Messages,Urgent Messages,Mentions,Guests,Active Shared Channels,Active External Users
2024-02-20,fcad7ab7-167f-424b-bcca-1862e7f1d09c,総務部,2022-05-31,Public,False,30,3,11,15,10,0,14,1,0,10,0,0,0
2024-02-20,05358a19-152e-4adb-bd10-f199ad3b99aa,人事部,,Private,False,30,3,2,3,1,0,1,2,0,2,0,0,0
2024-02-20,0917c986-117e-4eaf-9ab8-e16ef9b1168a,営業部,2022-12-20,Private,False,30,0,0,0,0,0,0,0,0,0,0,0,0

Get-MgTeam

使用例

Get-MgTeam -TeamId fcad7ab7-167f-424b-bcca-1862e7f1d09c

取得できる情報例

DisplayName Id                                   Description IsArchived
----------- --                                   ----------- ----------
総務部       fcad7ab7-167f-424b-bcca-1862e7f1d09c 総務部      True

Invoke-MgArchiveTeam

使用例

Invoke-MgArchiveTeam -TeamId fcad7ab7-167f-424b-bcca-1862e7f1d09c

30日以上アクティビティがないチームを全てアーカイブする

#CSVの保存先を指定する windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"

#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"

#保存するCSVのファイル名
$csvFileName = "archivedTeamList_${yyyyMMddFFFFF}.csv"

#新たにアーカイブしたチーム情報を格納する配列
$newArchivedTeamList = @()

#進捗状況管理の変数
$count = 0

#GraphPowerShellに接続する
Connect-MgGraph `
    -Scopes Reports.Read.All,TeamSettings.ReadWrite.All `
    -NoWelcome

#過去30日のチームアクティビティレポートをダウンロードする
Get-MgReportTeamActivityDetail `
    -Period D30 `
    -OutFile .\TeamActivityDetail.csv

#ダウンロードしたレポート情報を読み込む
$teamsActivityDetailList = Import-Csv .\TeamActivityDetail.csv

#削除済みチームを除外する
$teamsActivityDetailList = $teamsActivityDetailList | `
    Where-Object {$_.'Is Deleted' -eq $false} 

#レポート内のチームの数だけ繰り返す
foreach($teamActivity in $teamsActivityDetailList){

    #チームの現在の状態を取得する
    $team = Get-MgTeam -TeamId $teamActivity.'Team Id'

    #すでにアーカイブ済みの場合は以降の処理をスキップし
    #次のチームの処理へ移る
    if($team.IsArchived -eq $True){
        continue
    }

    #内部アクティブユーザー情報を取得し、文字列[String]から数字[int]へ変換する
    $activeUsersCount = [int]$teamActivity.'Active Users'

    #内部アクティブユーザーが0の場合、アーカイブ処理を実行する
    if($activeUsersCount -eq 0){
        $params = @{
            #サイトメンバーの権限をサイト閲覧者に変更し読み取りのみ許可する
            #アーカイブ化を解除することで自動解除される模様
            shouldSetSpoSiteReadOnlyForMembers = $true
        }
        Invoke-MgArchiveTeam `
            -TeamId $teamActivity.'Team Id' -BodyParameter $params
    }

    #アーカイブしたチーム情報を格納する
    $newArchivedTeamList += [PSCustomObject]@{
        DisplayName = $team.DisplayName
        Id = $team.Id
    }

    $count = $count + 1

    #進捗状況を小数点以下2桁で表示するようにフォーマットする
    $Completed = [Math]::Round(($count / $teamsActivityDetailList.Count) * 100,2)

    #進捗状況を表示させるコマンド
    Write-Progress -Activity "$Completed%完了" -PercentComplete $Completed
}

#アーカイブしたチームの一覧をCSVファイルとしてエクスポートする
$newArchivedTeamList | Sort-Object DisplayName | `
Export-Csv -Encoding UTF8 -NoTypeInformation -Path "${csvSavePath}\${csvFileName}"

#ダウンロードしたチームアクティビティレポートを削除する
Remove-Item .\TeamActivityDetail.csv

#GraphPowerShellから切断する
Disconnect-MgGraph

問い合わせフォーム

リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

    Microsoft365アカウントの認証方法登録情報を取得する前のページ

    ExchangePowerShellを使用して共有メールボックスのアクセス権を一括取得する次のページ

    関連記事

    1. MicrosoftTeams

      TeamsPowerShellを使用して全てチームのユーザー一覧を一括取得する

      各チームに所属しているメンバーの一覧をCSVファイルとして取…

    2. MicrosoftTeams

      TeamsPowerShellを使用してすべてのチャネルを取得する

      チャネルの使用状況や設定を一括変更する際の前準備として情報収…

    3. MicrosoftTeams

      GraphPowerShellからTeamsのチームを一括作成する

      New-MgTeamを使用してcsvファイルからチームを一括作成する方…

    最近の記事

    PAGE TOP