Site cover image

🐧 きまぐれクラウド日記

NotionをヘッドレスCMSとして利用しています。 AzureとMirosoft 365 に関することを備忘録と頭の整理の為に書いていきます。

🐧 Exchange Online の共有メールボックスをPowerShellで作成する

はじめに

Exchange Onlineの共有メールボックスの作成およびメンバーの追加等の設定をPowerShellを用いて一括で行います。

GUIでは困難な量の設定もPowerShellを用いることで手軽に行うことができます。

環境

  • PowerShell version: 7.3.4
  • Exchange Online PowerShell モジュール

PowerShellのバージョンがわからない場合は以下のコマンドを実行します。

#PowerShellのバージョン確認コマンド
$PSVersionTable

共有メールボックス作成

  1. 共有メールボックス作成
  2. メンバー割り当て
  3. 所有者として送信できるようにする
  4. 送信済みフォルダにメールをコピーする
  5. 確認

共有メールボックス作成用のCSVファイル

共有メールボックス作成用のCSVファイルを作成します。

以下を参考に「DisplayName」に表示名、「PrimarySmtpAddres」に共有メールボックスのメールアドレスを入力します。

DisplayName PrimarySmtpAddress
共有メールボックス01 [email protected]
共有メールボックス02 [email protected]
共有メールボックス03 [email protected]

共有メールボックス作成用PowerShell

グローバル管理者かExchange管理者でサインインします。

# 接続(グローバル管理者 or Exchange管理者)
Connect-ExchangeOnline

CSVファイルをインポートします。ファイルへのパスは自身の環境へ書き換えてください。

# 共有メールボックス作成用のCSV読み込み(パスは書き換えてください)
$CSVs = Import-Csv -Encoding UTF8 `
-Path "<CSVファイルへのパス>"

CSVファイルを元に共有メールボックスを作成します。

「Alias」はメールアドレスの@より前を抽出して入力しています。

「Alias」は不要なのでは?と感じるかもしれないですが、指定しない場合変な値が入ることがあるので明確に指定します。

#共有メールボックス作成
foreach($CSV in $CSVs)
{
    $txt = $CSV.PrimarySmtpAddress
    $re = "[a-z0-9!#\$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#\$%&'*+/=?^_`{|}~-]+)*@"
    $Alias = [regex]::Match($txt, $re, "IgnoreCase").Value.Replace("@","")
    
    New-Mailbox `
    -Shared `
    -Name $CSV.DisplayName `
    -DisplayName $CSV.DisplayName `
    -PrimarySmtpAddress $CSV.PrimarySmtpAddress `
    -Alias $Alias
}

共有メールボックスのメンバーが共有メールボックスからメールを送信した際に、デフォルトで送信済みフォルダに残らない設定になっています。

送信済みフォルダに残るように設定を変更します。

#送信済みに残る設定
foreach($CSV in $CSVs)
{
	  #送信されたメールが送信済みに残る設定
	  set-mailbox $CSV.DisplayName -MessageCopyForSentAsEnabled $True
	  
	  #代理で送信されたメールが送信済みに残る設定
	  set-mailbox $CSV.DisplayName -MessageCopyForSendOnBehalfEnabled $True
}

メンバー追加用のCSVファイル

対象の共有メールボックスに追加するユーザーを記載したCSVファイルを以下のように作成します。

メンバー追加用PowerShell

先程作成した「共有メールボックス01」にuser1-3を割り当てます。

グローバル管理者かExchange管理者でサインインします。

#接続(グローバル管理者 or Exchange管理者)
Connect-ExchangeOnline

メンバー追加用のCSVファイルをインポートします。ファイルへのパスは自身の環境へ書き換えてください。

# メンバー追加用のCSV読み込み(パスは書き換えてください)
$add_member = Import-Csv -Encoding UTF8 `
-Path "<CSVファイルへのパス>"

CSVファイルを元に共有メールボックスにメンバーを追加します。

# メンバー追加
foreach($a in $add_member)
{
	  Add-MailboxPermission `
	  -Identity $a.PrimarySmtpAddress `
	  -User $a.Member `
	  -AccessRights FullAccess `
	  -InheritanceType All 
}

デフォルトでは共有メールボックスのメンバーは所有者としてメールを送信することができません。

所有者としてメールを送信できるように設定を変更します。

# メンバーを共有メールボックスの所有者として送信できるようにする
foreach($a in $add_member)
{
	  Add-RecipientPermission `
	  -Identity $a.PrimarySmtpAddress `
	  -Trustee $a.Member `
	  -AccessRights SendAs `
	  -Confirm:$false
}

確認

最後に共有メールボックスの作成とメンバーの割り当てが正しいか確認のコマンドを流します。

確認用に「共有メールボックス作成」で使用したCSVファイルを再度読み込みます。

# 共有メールボックス作成用のCSV読み込み(パスは書き換えてください)
$CSVs = Import-Csv -Encoding UTF8 `
-Path "<CSVファイルへのパス>"

確認結果を変数に格納します。

# 共有メールボックスのメンバーを確認します
$check_sharebox = foreach($c in $CSVs)
{
  Get-MailboxPermission -Identity $c.PrimarySmtpAddress `
  | Select-Object @{
	Name = 'PrimarySmtpAddress'
	Expression = {$c.PrimarySmtpAddress}
  },Identity,User,AccessRights 
}

確認結果をCSVファイルとして出力しますので、出力先のパスと作成するファイル名を自分の環境の値に書き換えてください。

#確認結果をCSVとして出す
$check_sharebox `
| export-csv -Encoding UTF8 -Append `
-Path "<出力先のパス+ファイル名>"

PowerShellでの作業は以上になるので切断します。

#切断
Disconnect-ExchangeOnline -Confirm:$false

まとめ、所感

共有メールボックスの作成をGUIで行わずに済むので作業効率が上がります。

確認作業もコマンドで結果の出力することができ、証跡を残すのも楽になります。

参考