ExchangeOnline

ExchangePowerShellからMicrosoft365グループのメンバー一覧を取得する

本記事ではチーム機能が有効化されていない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.com

Get-UnifiedGroupLinks

使用例

Get-UnifiedGroupLinks -Identity JSF2018MS@ots.onmicrosoft.com -LinkType Subscribers

取得できる情報例

Name       RecipientType
----       -------------
user001    UserMailbox
user002    UserMailbox
user003    UserMailbox

Microsoft365グループのメンバーを取得し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へお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

    CSVから共有メールボックスのアクセス権を一括設定する前のページ

    ExchangePowerShellを使用して会議室を一括作成する次のページ

    関連記事

    1. ExchangeOnline

      ExchangePowerShellを使用して会議室を一括作成する

      会議室メールボックスをCSVファイルから一括作成する方法につ…

    2. ExchangeOnline

      CSVから共有メールボックスのアクセス権を一括設定する

      共有メールボックスのアクセス権を一括設定する方法について記載…

    3. ExchangeOnline

      ExchangePowerShellを利用して配布リストのメンバーを一括更新する

      すべての配布リストのメンバーを一括更新する方法について記載す…

    4. PCからメールが飛び出す画像

      ExchangeOnline

      ユーザーメールボックスのメッセージサイズを確認、変更する

      ユーザーメールボックスのメッセージサイズをPowerShellを使用し…

    5. ExchangeOnline

      ExchangeOnlinePowershellからMicrosoft365グループを一括作成する

      Microsoft365グループをCSVファイルから一括作成…

    最近の記事

    PAGE TOP