Microsoft Teamsで組織外のユーザーをテナントに招待して一緒に仕事をする際に、どうやって定期的にゲストユーザーを棚卸するかがひとつの課題になります。
解決方法のひとつとして、テナント内のすべてのチームのうち現在ゲストユーザーが含まれているチームをCSVに出力するPowerShellを作りました。
外部共有が有効かつ、ゲストユーザーがいないチームはこのスクリプトでは出力の対象外にしています。
使い方
スクリプトを実行するために必要なモジュールをPCにインストールします。管理者権限で下記コマンドを実行してください。
モジュールのインストールコマンド
Install-Module -Name ExchangeOnlineManagement
Install-Module -Name MicrosoftTeams
スクリプトは以下の通りです。
実行アカウントはお使いのテナントのアカウントに置き換えてください。
実行アカウントには「全体管理者」または「Teams 管理者」の役割を割り当ててください。「Teams 管理者」の役割を持つアカウントが Get-Teamを実行すると、そのアカウントがメンバーに含まれるかどうかに関わらずテナント内のすべてのチームの情報が取得できます。「全体管理者」は「Teams 管理者」の役割を包含しています。
ゲストユーザーがいるチームをCSVに出力する
# -------------------------------------------------
# 実行アカウント
# -------------------------------------------------
$user = "XXX@XXX.onmicrosoft.com"
$password = "XXX" | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user,$password)
# -------------------------------------------------
# 変数の設定
# -------------------------------------------------
# 出力するCSVのパス
$now = (Get-Date).ToString("yyyyMMdd_HHmm")
$CSVFilePath = ".\InventoryTeams_" + $now + ".csv"
# -------------------------------------------------
# 主処理
# -------------------------------------------------
# Exchange Onlineに接続する
Connect-ExchangeOnline -Credential $credential
# Microsoft Teamsに接続する
Connect-MicrosoftTeams -Credential $credential
# Microsoft365グループをすべて取得する
$groups = Get-UnifiedGroup -ResultSize Unlimited
# チームをすべて取得する
$teams = Get-Team
# ゲストユーザーがいるチームをCSVに出力する
foreach($team in $teams)
{
#チームに紐づくMicrosoft365グループを取得する
$targetGroup = $groups | where ExternalDirectoryObjectId -EQ $team.GroupId
#外部共有がオフの場合はスキップする
if($targetGroup.AllowAddGuests -eq $false)
{
continue
}
#ゲストユーザーがいない場合はスキップする
$teamUser = Get-TeamUser -GroupId $team.GroupId
$guests = $teamUser | Where-Object "Role" -EQ "guest" | Select-Object -ExpandProperty User
if($guests.Count -ne 0)
{
continue
}
$obj = New-Object PSObject
$obj | Add-Member -MemberType NoteProperty -Name DisplayName -Value $team.DisplayName
$obj | Add-Member -MemberType NoteProperty -Name PrimarySmtpAddress -Value $targetGroup.PrimarySmtpAddress
$obj | Add-Member -MemberType NoteProperty -Name GroupID -Value $team.GroupId
$obj | Export-Csv -Path $CSVFilePath -Encoding UTF8 -NoTypeInformation -Append -force
}
以上です。