ExchangeOnline

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

共有メールボックスのアクセス権を一括設定する方法について記載する。共有メールボックスのアクセス権を一度全て初期化したのち、新しく必要なアクセス権を設定しなおす。新規導入時や異動時期等にアクセス権の設定を行う際に使用してほしい。

検証環境について

動作確認した検証環境は以下の通り。

OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0

ExchangeOnlinePowershellのモジュール名とバージョン
ExchangeOnlineManagement:3.4.0

サインインアカウントの権限はグローバル管理者。

使用するコマンド

Get-Mailbox

使用例

Get-Mailbox -Identity share001@****.onmicrosoft.com -RecipientTypeDetails SharedMailbox

取得できる情報例

Name      Alias    Database           ProhibitSendQuota    ExternalDirectoryObjectId
----      -----    --------           -----------------    -------------------------
share001  share001 APCPR21DG198-db519 99 GB (106,300,440,… 51d19379-c60e-4b11-be19- …
share002  share001 APCPR11DG751-db487 99 GB (106,300,440,… 019eaf48-b01c-4998-9884- …
share003  share001 APCPR74DG364-db115 99 GB (106,300,440,… 1732862a-bb1b-5250-b377- 

Set-Mailbox

Get-RecipientPermission

使用例

Get-RecipientPermission -Identity share001@****.onmicrosoft.com -ResultSize unlimited

取得できる情報例

Identity Trustee                      AccessControlType AccessRights Inherited
-------- -------                      ----------------- ------------ ---------
share001 NT AUTHORITY\SELF            Allow             {SendAs}     False
share001 user001@****.onmicrosoft.com Allow             {SendAs}     False
share001 user001@****.onmicrosoft.com Allow             {SendAs}     False

Add-RecipientPermission

Remove-RecipientPermission

Remove-MailboxPermission

Add-MailboxPermission

CSVファイルを作成する

$csvSavePath = "$env:USERPROFILE\Desktop"

#CSVのファイル名
$csvFileName = "shareMailboxAccsess.csv"

$accountInfoCSV = [PSCustomObject]@{
    Identity = $null
    User = $null
    AccsessRights = $null
}

$accountInfoCSV | Export-Csv -Path "${csvSavePath}\${csvFileName}" `
-Encoding utf8 -NoTypeInformation

CSV記入例

IdentityUserAccsessRights
sharemail001@****.onmicrosoft.comuser001@****.onmicrosoft.comFullAccess
sharemail001@****.onmicrosoft.comuser001@****.onmicrosoft.comSendAs
sharemail002@****.onmicrosoft.comuser001@****.onmicrosoft.comFullAccess
sharemail002@****.onmicrosoft.comuser002@****.onmicrosoft.comSendOnBehalf

CSVファイルを読み込みアクセス権を再設定する

#CSVの保存先を指定する
$csvSavePath = "$env:USERPROFILE\Desktop"

#読み込むCSVファイル名を指定する
$csvFileName = "shareMailboxAccsess.csv"

#編集したCSVファイルを読み込む
$shareMailboxAccessList = Import-Csv -Path "${csvSavePath}\${csvFileName}"


#ExchangePowerShellに接続する
Connect-ExchangeOnline -ShowBanner:$false

#全ての共有メールボックスを取得する
$sharedMailboxlist = Get-Mailbox -RecipientTypeDetails SharedMailbox `
    -ResultSize unlimited

<# 共有メールボックスの既存のアクセス権を一度全て削除する #>

<#
    全ての共有メールボックスを読み込む
    [読み取り及び管理アクセス許可]の権限の情報を確認なしでリセットする
#>
$sharedMailboxlist | 
    Remove-MailboxPermission -ResetDefault -Confirm:$false

<#
    全ての共有メールボックスを読み込む
    付与されている権限を取得
    共有メールボックス自身の権限以外のアクセス権情報を抽出
    [メールボックス所有者として送信するアクセス許可]の権限を確認なしで削除する
#>
$sharedMailboxlist |
    Get-RecipientPermission -ResultSize unlimited |
    Where-Object{$_.Trustee -ne "NT AUTHORITY\SELF"} |
    Remove-RecipientPermission -AccessRights SendAs -Confirm:$false

<#
    全ての共有メールボックスを読み込む
    [代理人として送信するアクセス許可]の権限を削除する
#>
$sharedMailboxlist |
    Set-Mailbox -GrantSendOnBehalfTo $null

<# 新しいアクセス権を付与する #>

#フルアクセス権を付与するアカウント抽出する
$fullAccessAccountList = $shareMailboxAccessList | 
    Where-Object {$_.AccsessRights -eq "FullAccess"}

#[読み取り及び管理アクセス許可]の権限を付与する
foreach($fullAccessAccount in $fullAccessAccountList){
    Add-MailboxPermission `
        -Identity $fullAccessAccount.Identity `
        -User $fullAccessAccount.User `
        -AccessRights FullAccess
}

#所有者権限を付与するアカウントを抽出する
$sendAsAccountList = $shareMailboxAccessList | 
    Where-Object {$_.AccsessRights -eq "SendAs"}

#[メールボックス所有者として送信するアクセス許可]の権限を付与する
foreach($sendAsAccount in $sendAsAccountList){
    Add-RecipientPermission `
        -Identity $sendAsAccount.Identity `
        -Trustee $sendAsAccount.User `
        -AccessRights SendAs`
        -Confirm:$false
}

#代理人権限を付与するアカウント抽出する
$sendOnBehalfAccountList = $shareMailboxAccessList | 
    Where-Object {$_.AccsessRights -eq "SendOnBehalf"}

#[代理人として送信するアクセス許可]の権限を付与する
foreach($sendOnBehalfAccount in $sendOnBehalfAccountList){
    Set-Mailbox $sendOnBehalfAccount.Identity `
        -GrantSendOnBehalfTo @{Add=$sendOnBehalfAccount.User}
}

問い合わせフォーム

リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

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

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

    関連記事

    1. ExchangeOnline

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

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

    2. ExchangeOnline

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

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

    3. ExchangeOnline

      ExchangePowershellを使用して配布リストのメンバーを一括取得する

      配布リストに所属するメンバーの一覧を一括取得しCSVファイル…

    4. ExchangeOnline

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

      本記事ではチーム機能が有効化されていないMicrosoft3…

    5. ExchangeOnline

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

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

    最近の記事

    PAGE TOP