どうもミツシマです。

前回「(ExchangeOnline)共有メールボックスを一括作成するPowershellコマンドを検証してみた」の続きになります。
前回は共有メールボックスを一括で作成するPowershellコマンドを検証しましたが、今回は作成した共有メールボックスに対して「フルアクセス許可の設定」と「メールボックス所有者として送信する許可設定」を設定する検証となります。


検証環境は以下の通り
PC:Windows10


〜検証〜

今回使用する基本的なコマンドは以下の通り
コマンド設定内容
Add-MailboxPermissionフルアクセス許可の付与
Add-RecipientPermission「メールボックス所有者として送信する」
権利を許可
Set-Mailbox -MessageCopyForSentAsEnabled $True共有メールボックスの「送信済みアイテム」に
メールを残す設定

今回検証後に気付いたのですが、共有メールボックスのメールアドレスからメールを送信すると、初期設定だと送信した人のメールボックスの「送信済みアイテム」にメールが格納されてしまいます。

どういうことかというと、「山田太郎」というユーザーで共有メールボックスのアドレス「info@~」のようなアドレスを使用してメール送信すると、「info@~」のメールボックスの「送信済みアイテム」ではなく、「山田太郎」の「送信済みアイテム」に格納されてしまいます。
それだと少し不便だと感じたので、急遽この設定も追加しています。
※受信は当たり前ですが、共有メールアドレス宛のものは共有メールボックスに格納されます。


そして出来たスクリプトがこちら↓↓↓


〜SetFullAccess-ShareMailBox.ps1〜

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$TxtFolderPath = $CurrentFolder + "\ShareMailBoxMember\"
$OutputLogFilePath1 = $CurrentFolder + "\SetFullAccess-ShareMailBoxMember.log"

#「ShareMailBoxMember」フォルダーがあるかどうかをチェックし、なければエラー表示で終了
If(-Not(Test-Path $TxtFolderPath)){
    Write-Output "「ShareMailBoxMember」が同じフォルダにありません。処理を中断します。"
    pause
    Exit
}

###事前接続準備
#認証情報取得
$UserCredential = Get-Credential

#接続(リモートセッションの作成)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

#接続(リモートセッションの作成) プロキシ環境の場合
#$proxyOptions = New-PSSessionOption -ProxyAccessType IEConfig -ProxyAuthentication Negotiate
#$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection -SessionOption $proxyOptions

#Exchange Onlineコマンドレットのインポート
Import-PSSession $Session

#「ShareMailBoxMember」配下のファイル一覧出力
$AllTxtInfo = Get-ChildItem $TxtFolderPath

#全メールボックスを取得
$AllMailBox = Get-Mailbox

foreach($TxtInfo in $AllTxtInfo){

    #ファイル名(共有メールボックス名)を取得する
    $ShareMailBoxName = [String]$TxtInfo.BaseName
    
    #「フルアクセス許可」を追加する対象「共有メールボックス」を取得
    $ShareMailBox = $AllMailBox | Where-Object {$_.DisplayName -eq $ShareMailBoxName}

    #ファイルを読み込む
    $AllTxtContent = (Get-Content -Path $TxtInfo.PSPath) -as [string[]]
    
    #ファイルを1行ずつ読みこんでユーザーをフルアクセス許可に追加する
    foreach($TxtContent in $AllTxtContent){
            
            #出力確認
            [String]$strMessage = "共有メールボックス「" + $ShareMailBox.DisplayName + "」のフルアクセス許可をユーザー「" + $TxtContent + "」に付与します."
            Write-Output $strMessage >> $OutputLogFilePath1
            
            #フルアクセス許可追加
            Add-MailboxPermission -Identity $ShareMailBox.DisplayName -User $TxtContent -AccessRights FullAccess -InheritanceType All

            #「メールボックス所有者として送信する」権利を許可
            Add-RecipientPermission -Identity $ShareMailBox.DisplayName -Trustee $TxtContent -AccessRights SendAs -Confirm:$false

    }

    #アクセス許可確認の為のログ出力
    Write-Output `r`n >> $OutputLogFilePath1
    Write-Output "${ShareMailBoxName}のアクセス許可一覧を出力します." >> $OutputLogFilePath1
    Get-MailboxPermission -Identity $ShareMailBox.DisplayName | Select-Object Identity,User,AccessRights | Sort-Object User >> $OutputLogFilePath1
    Write-Output "${ShareMailBoxName}の「メールボックス所有者として送信」出来るユーザー一覧を出力します." >> $OutputLogFilePath1
    Get-RecipientPermission -Identity $ShareMailBox.DisplayName | Sort-Object Trustee >> $OutputLogFilePath1

    #個別で送信したメールについて、共有メールボックスの「送信済みアイテム」に残す設定
    Write-Output "${ShareMailBoxName}の「送信済みアイテム」に残す設定かどうか確認します(True=残す)." >> $OutputLogFilePath1
    Set-Mailbox -Identity $ShareMailBox.DisplayName -MessageCopyForSentAsEnabled $True
    Get-Mailbox -Identity $ShareMailBox.DisplayName | Select-Object Name,MessageCopyForSentAsEnabled | Sort-Object MessageCopyForSentAsEnabled >> $OutputLogFilePath1
}

#セッション切断
Remove-PSSession $Session

Write-Host "処理が完了しました."

pause


〜準備するテキストファイル例〜

test 01
test 02
test 03
test 04
test 05
test 06
全社員


〜解説〜

まず準備するものは「SetFullAccess-ShareMailBox.ps1」と「ShareMailBoxMember」フォルダです。
ShareMailBoxMember」配下に共有メールボックスの「表示名」をファイル名としたテキストファイルを準備します。
そのテキストファイルの中に、共有メールボックスを使用させたいユーザーリストを記載します。
※ユーザーリストの中に「メールが有効なセキュリティ」グループを追加することも可能です。
 こうすれば、1名ずつユーザーを追加しなくとも良いかもしれませんね。



こんな感じです↓↓↓
10フォルダ構成

11フォルダ構成

12テキストファイル例


それぞれ準備が出来たらスクリプトを実行する。
実行すると「SetFullAccess-ShareMailBoxMember.log」が出力されます。
14ログ画面


ではここからはスクリプトの解説をします。
スクリプトの流れとしては以下の通りです。

  1. 「ShareMailBoxMember」フォルダの有無を確認し、なければエラーで終了します
  2. ExchangeOnlineに接続
  3. 「ShareMailBoxMember」配下のファイル一覧を取得
  4. 全メールボックスを取得
  5. 「ShareMailBoxMember」配下のファイルを一つずつ読み込み、ファイル名から対象の共有メールボックスを取得
  6. ファイルの中身から「フルアクセス許可」と「メールボックス所有者として送信する」に追加許可するユーザーを取り出して各種設定
  7. 共有メールボックスの「送信済みアイテム」に送信したメールを残す設定を付与
  8. ログ出力

こんな感じです。
注意点としては、準備するテキストファイル名と中身はすべて「表示名」で構成されている所だ。
その為このブログを書いていて思ったのですが、同姓同名がいたらどうしよう。。。^^;

その場合は、テキストファイルの中身を「表示名」ではなく「メールアドレス」に変えれば大丈夫だと思われます。(未検証)
一応「 Add-RecipientPermission」コマンドのヘルプ例を見ると「-User」パラメータに「メールアドレス(ユーザープリンシパル名)」を使用している例があるので多分行けるはず!!
※もしかしたら「メールアドレス(ユーザープリンシパル名)」の方が良いかもですね。
 この辺りは時間があれば再検証してみたいと思います。


とりあえず今回の検証はここまで。
次回はリソースメールボックスについて検証してみたいと思います(^^)

スポンサードリンク