
社内の共有メールボックスを整理するのに、全メールボックスのメンバー情報が知りたいな。

PowerShellコマンドで取得できるよ。
ぼくはチュールの製造メンバーが知りたいにゃ。
やりたいこと
テナント(組織内)に存在するすべての共有メールボックスについて、以下の情報を出力したい。
・表示名
・メールアドレス
・メンバーの表示名
・メンバーのUPN
※メンバーにセキュリティグループが含まれる場合は、そのグループの表示名とメールアドレスも出力したい。
前提
4つの共有メールボックスがあり、メンバー構成は以下のとおり。
「春_shared」のみ、「夏」というメールが有効なセキュリティグループをメンバーとして持っている。
共有メールボックス | 春_shared | 夏_shared | 秋_shared | 冬_shared |
メンバー | いちご びわ さくらんぼ 夏(セキュリティG) | メロン すいか もも | なし かき ぶどう | みかん れもん りんご |
コマンド
実行するには”Exchange管理者権限”が必要です。
以下のコマンドをPowerShellで実行。サインインを求められるので、Exchange管理者権限があるアカウントでサインインします。
出力先のパスやファイル名は任意で。
Connect-ExchangeOnline -ShowProgress $true
# 共有メールボックスの情報取得
$SharedMailBoxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited |
Select-Object DisplayName, PrimarySmtpAddress
# 共有メールボックスのメンバーを取得
$SharedMailBoxAndMembers = @()
foreach ($SharedMailbox in $SharedMailBoxes) {
$SharedMBXMembers = Get-MailboxPermission -Identity $SharedMailbox.PrimarySmtpAddress -ResultSize Unlimited |
Where-Object { $_.IsInherited -eq $false -and $_.User -ne 'NT AUTHORITY\SELF' } |
Select-Object @{Name='SharedMailBoxName'; Expression={$SharedMailbox.DisplayName}},
@{Name='SharedMailBoxSmtpAddress'; Expression={$SharedMailbox.PrimarySmtpAddress}},
User,
AccessRights
foreach ($member in $SharedMBXMembers) {
# メンバーがユーザーの場合
if ($member.User -like '*@*') {
$memberObject = Get-Recipient $member.User
$member | Add-Member -MemberType NoteProperty -Name DisplayName -Value $memberObject.DisplayName
$member | Add-Member -MemberType NoteProperty -Name MemberType -Value "user"
# User列はそのまま(UPNを保持)
}
# メンバーがセキュリティグループの場合
else {
$group = Get-DistributionGroup -Identity $member.User
$member | Add-Member -MemberType NoteProperty -Name DisplayName -Value $group.DisplayName
$member | Add-Member -MemberType NoteProperty -Name MemberType -Value "securityGroup"
# User列をグループのSMTPアドレスで上書き
$member.User = $group.PrimarySmtpAddress
}
$SharedMailBoxAndMembers += $member
}
}
# 列の順序を指定してCSVファイルにエクスポート
$CsvFileName = "SharedMailBoxAndMembers_$(Get-Date -Format 'yyyyMMddHHmm').csv"
$SharedMailBoxAndMembers |
Select-Object SharedMailBoxName, SharedMailBoxSmtpAddress, DisplayName, User, MemberType, AccessRights |
Export-Csv -Path (Join-Path "C:\temp" $CsvFileName) -NoTypeInformation -Encoding UTF8
実行結果
C:ドライブのtempフォルダに出力されました。
ファイル名に出力した日時も入っています。

出力されたcsvはこちら。
A列から順に、”共有メールボックスの表示名”、”共有メールボックスのメールアドレス”、”メンバーの表示名”、”メンバーのUPN”、”メンバーのタイプ(ユーザーかセキュリティGか)”、”アクセス権限”が格納されています。
「春_Shared」のメンバーである「夏(セキュリティG)」もちゃんと取得できています◎

ちなみに「FullAccess」というのは、Exchange管理センターではこちらに該当します。
今回のコマンドでは、フルアクセスを持つメンバーのみを取得しています。
※「春_Shared」の「メールボックス所有者として送信する」には、「夏(セキュリティG)」は含まれていません。

この権限(委任)の違いについてはまた別の記事にて…。
コメント