本記事ではチーム機能が有効化されていないMicrosoft365グループのメンバーを取得する。チームが有効化されたMicrosoft365グループのメンバーを取得する場合は、以下リンクでTeamsPowerShellから取得する方法について記載しているので確認してほしい。
GraphPowerShellからすべてのチームのメンバーを取得する | 怠惰なMicrosoft365管理者 (365ps.jp)
検証環境について
動作確認した検証環境は以下の通り。
OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0
ExchangeOnlineManagementのモジュール名とバージョン
ExchangeOnlineManagement:3.4.0サインインアカウントの権限はグローバル管理者。
取得できるCSVのイメージ
"MS365GroupDisplayName","MS365GroupAddress","MS365GroupAccessType","memberDisplayName","memberAddress","RecipientTypeDetails"
"Teams001","team001@****.onmicrosoft.com","Private","User001","user001@****.onmicrosoft.com","User"
"Teams002","team002@****.onmicrosoft.com","Private","User002","user002@****.onmicrosoft.com","UserMailbox"
"Teams002","team002@****.onmicrosoft.com","Private","User003","user003@****.onmicrosoft.com","UserMailbox"
"Teams003","team003@****.onmicrosoft.com","Private","User004","user004@****.onmicrosoft.com","UserMailbox"使用するコマンド
Get-UnifiedGroup
使用例
Get-UnifiedGroup -Identity 365GroupAddress@****.onmicrosoft.com取得できる情報例
Name DisplayName GroupType PrimarySmtpAddress
---- ----------- --------- ------------------
365GroupAddress 365グループ Universal 365GroupAddress@****.onmicrosoft.comGet-UnifiedGroupLinks
使用例
Get-UnifiedGroupLinks -Identity JSF2018MS@ots.onmicrosoft.com -LinkType Subscribers取得できる情報例
Name RecipientType
---- -------------
user001 UserMailbox
user002 UserMailbox
user003 UserMailboxMicrosoft365グループのメンバーを取得しCSVファイルに保存する
#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"
#CSVの保存先 windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"
#保存するCSVのファイル名
$csvFileName = "allMicrosoft365GroupMemberList_${yyyyMMddFFFFF}.csv"
#取得した情報を格納する配列を宣言する
$result = @()
#実行数管理の変数
$count = 0
#ExchangePowerShellに接続する
Connect-ExchangeOnline -ShowBanner:$false
#Teamsが紐づいていないMicrosoft365グループを取得する
$all365GroupList = Get-UnifiedGroup `
-ResultSize Unlimited `
-Filter {ResourceProvisioningOptions -ne "Team"}
#各Microsoft365グループのメンバーを取得し、結果を配列に格納する
foreach($365group in $all365GroupList){
$365GroupMemberList = $365group |
Get-UnifiedGroupLinks -LinkType Subscribers -ResultSize Unlimited
#取得したメンバーのメールアドレスを取得し結果を格納する
foreach($365GroupMember in $365GroupMemberList){
if($365GroupMember.RecipientTypeDetails -eq "GuestMailUser"){
#取得アカウント情報例:guestuser001_gmail.com#EXT#@****.onmicrosoft.com
#取得したゲストアカウントを#を起点として分割し最初の値を取得する
#分割例:guestuser001_gmail.com EXT @****.onmicrosoft.com
$guestuser = $365GroupMember.WindowsLiveID.Split("#")[0]
#_を@に置き換え結果を格納する
#実行前:guestuser001_gmail.com
#実行後:guestuser001@gmail.com
$memberAddress = $guestuser.replace("_","@")
}else{
if($365GroupMember.PrimarySmtpAddress -ne ""){
#PrimarySmtpAddressに値が設定されている場合の処理
$memberAddress = $365GroupMember.PrimarySmtpAddress
}else{
#PrimarySmtpAddressに値が設定されていない場合の処理
#RecipientTypeDetailがUser等の場合メール機能がないため
#代わりにWindowsLiveIDのアカウント情報を格納する
$memberAddress = $365GroupMember.WindowsLiveID
}
}
#取得した情報を格納する
$result += [PSCustomObject]@{
ms365GroupDisplayName = $365group.DisplayName
ms365GroupAddress = $365group.PrimarySmtpAddress
ms365GroupAccessType = $365group.AccessType
memberDisplayName = $365GroupMember.DisplayName
memberAddress = $memberAddress
RecipientTypeDetails = $365GroupMember.RecipientTypeDetails
}
}
$count = $count + 1
$Completed = [Math]::Round(($count / $all365GroupList.Count) * 100,2)
Write-Progress -Activity "$Completed%完了" -PercentComplete $Completed
}
#取得した結果を並び替え、CSVファイルとして保存する
$result | Sort-Object MS365GroupDisplayName,memberDisplayName,RecipientTypeDetails |
Export-Csv -Encoding utf8 `
-NoTypeInformation `
-Path "${csvSavePath}\${csvFileName}"
#ExchangeOnlinePowerShellから切断する
Disconnect-ExchangeOnline -Confirm:$false問い合わせフォーム
リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。





