一定期間特定のアクティビティのないチームを、一括でアーカイブ化する方法について記載する。
確認する限り、いつアーカイブ状態になったか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,0Get-MgTeam
使用例
Get-MgTeam -TeamId fcad7ab7-167f-424b-bcca-1862e7f1d09c取得できる情報例
DisplayName Id Description IsArchived
----------- -- ----------- ----------
総務部 fcad7ab7-167f-424b-bcca-1862e7f1d09c 総務部 TrueInvoke-MgArchiveTeam
使用例
Invoke-MgArchiveTeam -TeamId fcad7ab7-167f-424b-bcca-1862e7f1d09c30日以上アクティビティがないチームを全てアーカイブする
#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へお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。







