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

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

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

    2. ExchangeOnline

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

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

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

      ExchangeOnline

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

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

    4. ExchangeOnline

      ExchangeOnlineでメールが検疫された際にユーザーに通知メールが送信されるよう設定する

      本記事作成時点では、デフォルトの設定の場合、管理者にもユーザーにも検…

    5. ExchangeOnline

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

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

    6. ExchangeOnline

      ExchangePowerShellを使用して共有メールボックスのアクセス権を一括取得する

      共有メールボックスに対して付与されているアクセス権を一括取得…

    最近の記事

    PAGE TOP