ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

Microsoft Teamsで現在ゲストユーザーがいるチームをPowerShellを使ってCSVに出力する

f:id:wataruf01:20220322000742p:plain

主旨

Microsoft Teamsで組織外のユーザーをテナントに招待して一緒に仕事をする際に、どうやって定期的にゲストユーザーを棚卸するかがひとつの課題になります。

解決方法のひとつとして、テナント内のすべてのチームのうち現在ゲストユーザーが含まれているチームをCSVに出力するPowerShellを作りました。
外部共有が有効かつ、ゲストユーザーがいないチームはこのスクリプトでは出力の対象外にしています。
github.com

使い方

スクリプトを実行するために必要なモジュールを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
}

以上です。