どうもミツシマです。

本日はExchangeOnlineで「共有メールボックス」を複数一括で作成するPowershellコマンドについて検証してみました。


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


〜検証〜

今回使用する基本的なコマンドは以下の通り
コマンド内容
New-Mailbox -Shared共有メールボックスの作成
Set-MailboxRegionalConfigurationメールボックスのタイムゾーン設定
(日本にしないと受信トレイ等が英語になる為)
Get-Mailbox作成されているメールボックスの確認
Get-MailboxRegionalConfiguration作成されているメールボックスの
タイムゾーンの確認


上記に加えて運用するのであれば、「フルアクセス許可の設定」と「メールボックス所有者として送信する許可設定」が必要になるが、長くなるのでスクリプトを分けている
※次回以降で検証内容は記載予定!!

ということで今回は純粋に共有メールボックスを作成して、タイムゾーンを「日本」に設定するまでのスクリプトを検証・作成してみました。


完成したスクリプトがこちら↓↓↓


〜Add-ShareMailBox.ps1〜

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$CSVFilePath = $CurrentFolder + "\ShareMailBox.csv"
$OutputLogFilePath = $CurrentFolder + "\Add-ShareMailBox.log"
$OutputLogFilePath2 = $CurrentFolder + "\Result-ShareMailBox.log"
#今回操作した共有メールボックスのタイムゾーンを設定するためのコマンド作成用配列
$ArrayGetGroupCMD = @();
$GeneratePScript = $CurrentFolder + "\ShareMailBox-SetTimeZone.ps1"

$ArrayGetGroupCMD += '$UserCredential = Get-Credential'
$ArrayGetGroupCMD += '$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection'
$ArrayGetGroupCMD += '#$proxyOptions = New-PSSessionOption -ProxyAccessType IEConfig -ProxyAuthentication Negotiate'
$ArrayGetGroupCMD += '#$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection -SessionOption $proxyOptions'
$ArrayGetGroupCMD += 'Import-PSSession $Session | Out-Null'
$ArrayGetGroupCMD += "Write-Host `"共有メールボックスのタイムゾーンをJPへ設定しています....`"" 

$CSVファイルの読み込み
$AllShareMailBox = Import-Csv -Path $CSVFilePath -Encoding Default

###事前接続準備
#認証情報取得
$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 | Out-Null

foreach($ShareMailBox in $AllShareMailBox){

    $ShareMailBoxName = $ShareMailBox.DisplayName

    $strMessage = "共有メールボックス「" + $ShareMailBoxName + "」を作成."
    Write-Output $strMessage >> $OutputLogFilePath    
    #共有メールボックスの作成
    New-Mailbox -Shared -Name $ShareMailBoxName -DisplayName $ShareMailBoxName -PrimarySmtpAddress $ShareMailBox.PrimarySmtpAddress -Alias $ShareMailBox.Alias

    #タイムゾーンをJPへ変更するコマンド作成
    $ArrayGetGroupCMD += "Set-MailboxRegionalConfiguration -Identity `"${ShareMailBoxName}`" -DateFormat `"yyyy/MM/dd`" -Language `"ja-JP`" -TimeFormat `"H:mm`" -TimeZone `"Tokyo Standard Time`" -LocalizeDefaultFolderName"
    $ArrayGetGroupCMD += "Get-MailboxRegionalConfiguration -Identity `"${ShareMailBoxName}`" >> `"${OutputLogFilePath2}`""
}

#設定情報が反映されるまでの時間を稼ぐ(10秒)
Start-Sleep -m 10

$ArrayGetGroupCMD += 'Remove-PSSession $Session'

#今回追加した共有メールボックスのタイムゾーンをJPへ変更するコマンドを作成
foreach($GetGroupCMD in $ArrayGetGroupCMD){
    
     $GetGroupCMD >> $GeneratePScript

}

#確認コマンド
Write-Output "===共有メールボックスの一覧出力結果===" >> $OutputLogFilePath

$AllShareMailBoxInfo = Get-Mailbox | where { $_.IsShared -eq "Trure"}
$AllShareMailBoxInfo | Select-Object Name,Alias,PrimarySmtpAddress | Sort-Object Name | Format-List >> $OutputLogFilePath

Write-Output "===共有メールボックスの一覧出力結果===" >> $OutputLogFilePath

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

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

pause


〜ShareMailBox.csv(例)〜

DisplayName,PrimarySmtpAddress,Alias
お問合せ,infomation@mm20191113.onmicrosoft.com,infomation
人事,recruit@mm20191113.onmicrosoft.com,recruit


〜ShareMailBox-SetTimeZone.ps1(例)〜

$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
Import-PSSession $Session | Out-Null
Write-Host "共有メールボックスのタイムゾーンをJPへ設定しています...."
Set-MailboxRegionalConfiguration -Identity "お問合せ" -DateFormat "yyyy/MM/dd" -Language "ja-JP" -TimeFormat "H:mm" -TimeZone "Tokyo Standard Time" -LocalizeDefaultFolderName
Get-MailboxRegionalConfiguration -Identity "お問合せ" >> "D:\~\Result-ShareMailBox.log"
Set-MailboxRegionalConfiguration -Identity "人事" -DateFormat "yyyy/MM/dd" -Language "ja-JP" -TimeFormat "H:mm" -TimeZone "Tokyo Standard Time" -LocalizeDefaultFolderName
Get-MailboxRegionalConfiguration -Identity "人事" >> "D:\~\Result-ShareMailBox.log"
Remove-PSSession $Session


〜解説〜

今回用意するのは「Add-ShareMailBox.ps1」と「ShareMailBox.csv」の2つ
CSVファイルに必要な項目は「DisplayName(表示名)」・「PrimarySmtpAddress(メールアドレス)」・「Alias(エイリアス)」の3つです。
注意点としては、「DisplayName」には日本語使用可であるが、他は使用しない方がいい!!
※というかメールアドレスは絶対に日本語不可ですが。。。

例としては、2つの共有メールアドレスを作成するようにしています。

そしてスクリプトの流れとしては、スクリプトとCSVファイルを同じフォルダ階層に配置して実行します。
そうするとCSVファイルの中身を見て、共有メールボックスを順次作成していきます。
本当はこのスクリプトの中で「タイムゾーンの設定」もやりたかったのですが、共有メールボックスを作成してすぐだと、「まだメールボックスがないよ〜〜」というエラーが出てしまうので、今回も別コマンド(ShareMailBox-SetTimeZone.ps1)として、作成するようにしています。
その為、共有メールボックスの作成後に同じフォルダに出来た「ShareMailBox-SetTimeZone.ps1」を最後に実行する感じです。


全体の流れをまとめるとこんな感じです↓↓↓
  1. 「Add-ShareMailBox.ps1」を実行する
  2. 「ShareMailBox.csv」の中身を見て共有メールボックスを作成する
  3. 実行結果のログを同じフォルダ配下の「Add-ShareMailBox.log」に出力する。
  4. 実行後、同じフォルダ配下に「ShareMailBox-SetTimeZone.ps1」が作成される。
  5. (プロキシ環境の場合のみ)「ShareMailBox-SetTimeZone.ps1」のファイルの2行目をコメントアウトして、3行目と4行目のコメントアウトを解除する
  6. 「ShareMailBox-SetTimeZone.ps1」を実行する。
  7. 実行結果のログを同じフォルダ配下の「Result-ShareMailBox.log」に出力する。


実際に実行するとこんな画面です↓↓↓
01実行画面

(Add-ShareMailBox.log)
02ログ

(実行後のフォルダ)
03フォルダ構成

(Result-ShareMailBox.log)
05ログ

(最終的なフォルダの状況)
06最終フォルダ構成



今回の検証はこれにて終了。
興味本位からExchange Onlineの検証をしているが、意外とやることが多くてびっくりしている。
ユーザーを作成してメールボックスが出来れば終わり、なんて考えが早々に吹っ飛ぶくらい事前に考えて設定しないといけないことが多いね(^^)
この辺りはコマンド検証が終わった後に自分なりにまとめていきたいと考えています!!




スポンサードリンク