どうもミツシマです。

以前「(Office365)セキュリティグループにユーザーを一括追加(設定)する方法を検証してみた 〜Powershell〜」を検証していましたが、今回はセキュリティグループも含めて4つすべてのグループをPowershellコマンドで一括作成するコマンドを検証してみました。


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


〜検証〜

まずそれぞれのグループ作成に使用するコマンドを確認。
グループコマンド
セキュリティNew-MsolGroup
New-AzureADGroup
メールが有効なセキュリティNew-DistributionGroup -Type Security
配布リストNew-DistributionGroup -Type Distribution
Office365New-UnifiedGroup

こんな感じ。
で色々検証して作成したスクリプトがこちら↓↓↓


〜Add-Office365Groups.ps1〜

#環境変数の設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$CSVFilePath = $CurrentFolder + "\Office365Groups.csv"
$OutputLogFilePath = $CurrentFolder + "\Add-Office365Groups.log"

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

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

#MSOへログイン
Connect-MsolService -Credential $UserCredential | Out-Null

#接続(リモートセッションの作成)
$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

foreach($Groupinfo in $SetOffice365Groupinfo){
    
    switch -exact($Groupinfo.Type){
        
        "セキュリティ"{
            $strMessage = "セキュリティグループ「" + $Groupinfo.GroupName + "」を作成."
            Write-Output $strMessage >> $OutputLogFilePath
            New-MsolGroup -DisplayName $Groupinfo.GroupName -Description $Groupinfo.Description | Out-Null
            ;break 
        }

        "メールが有効なセキュリティ"{
            $strMessage = "メールが有効なセキュリティグループ「" + $Groupinfo.GroupName + "」を作成."
            Write-Output $strMessage >> $OutputLogFilePath
            [boolean]$Bool = [System.Convert]::ToBoolean($Groupinfo.RequireSenderAuthenticationEnabled)
            New-DistributionGroup -Type Security -Name $Groupinfo.GroupName -Notes $Groupinfo.Description -PrimarySmtpAddress $Groupinfo.PrimarySmtpAddress -Alias $Groupinfo.Alias -RequireSenderAuthenticationEnabled $Bool | Out-Null
            ;break
        }

        "配布リスト"{
            $strMessage = "配布リストグループ「" + $Groupinfo.GroupName + "」を作成."
            Write-Output $strMessage >> $OutputLogFilePath
            [boolean]$Bool = [System.Convert]::ToBoolean($Groupinfo.RequireSenderAuthenticationEnabled)
            New-DistributionGroup -Type Distribution -Name $Groupinfo.GroupName -Notes $Groupinfo.Description -PrimarySmtpAddress $Groupinfo.PrimarySmtpAddress -Alias $Groupinfo.Alias -RequireSenderAuthenticationEnabled $Bool | Out-Null
            ;break
        }

        "Office365"{
            $strMessage = "Office365グループ「" + $Groupinfo.GroupName + "」を作成."
            Write-Output $strMessage >> $OutputLogFilePath
            [boolean]$Bool = [System.Convert]::ToBoolean($Groupinfo.RequireSenderAuthenticationEnabled)
            New-UnifiedGroup -DisplayName $Groupinfo.GroupName -Name $Groupinfo.GroupName -Notes $Groupinfo.Description -PrimarySmtpAddress $Groupinfo.PrimarySmtpAddress -Alias $Groupinfo.Alias -AccessType Private | Out-Null
            Set-UnifiedGroup -Identity $Groupinfo.GroupName -Language ja-JP -RequireSenderAuthenticationEnabled $Bool | Out-Null
            ;break
        }
    }
}

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

Write-Output `r`n >> $OutputLogFilePath
Write-Output "===グループの一覧出力結果===" >> $OutputLogFilePath

Get-MsolGroup | Where-Object{ $_.GroupType -eq "Security"} | Select-Object DisplayName,Description,EmailAddress | Sort-Object DisplayName | ft -AutoSize >> $OutputLogFilePath
Get-DistributionGroup | Select-Object DisplayName,GroupType,PrimarySmtpAddress,RequireSenderAuthenticationEnabled | Sort-Object DisplayName | ft -AutoSize >> $OutputLogFilePath
Get-UnifiedGroup | Select-Object DisplayName,GroupType,PrimarySmtpAddress,RequireSenderAuthenticationEnabled | Sort-Object DisplayName | ft -AutoSize >> $OutputLogFilePath

Write-Output "===グループの一覧出力結果===" >> $OutputLogFilePath

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


〜Office365Groups.csv〜

Type,GroupName,Description,PrimarySmtpAddress,Alias,RequireSenderAuthenticationEnabled
セキュリティ,営業部Gr,営業部のセキュリティグループ,,,
セキュリティ,開発部Gr,開発部のセキュリティグループ,,,
セキュリティ,総務部Gr,総務部のセキュリティグループ,,,
メールが有効なセキュリティ,営業部Gr-Mail,営業部のセキュリティグループ(メール有),sales-gr@~.onmicrosoft.com,sales-gr,False
メールが有効なセキュリティ,開発部Gr-Mail,開発部のセキュリティグループ(メール有),developments-gr@~.onmicrosoft.com,developments-gr,True
メールが有効なセキュリティ,総務部Gr-Mail,総務部のセキュリティグループ(メール有),general-gr@~.onmicrosoft.com,general-gr,True
配布リスト,営業部グループメール,営業部のメール配布リスト,sales-gr-mail@~.onmicrosoft.com,sales-gr-mail,False
配布リスト,開発部グループメール,開発部のメール配布リスト,developments-gr-mail@~.onmicrosoft.com,developments-gr-mail,False
配布リスト,総務部グループメール,総務部のメール配布リスト,general-gr-mail@~.onmicrosoft.com,general-gr-mail,True
Office365,営業部-Office365グループ,営業部のOffice365グループ,sales-office365gr@~.onmicrosoft.com,sales-office365gr,False
Office365,開発部-Office365グループ,開発部のOffice365グループ,developments-office365gr@~.onmicrosoft.com,developments-office365gr,False
Office365,総務部-Office365グループ,総務部のOffice365グループ,general-office365gr@~.onmicrosoft.com,general-office365gr,True



〜解説〜

まずは使用するCSVファイルの解説から。
CSVファイルで必要なパラメータを準備しています。
それぞれのパラメータはこんな感じです。
パラメータ項目備考
Typeグループ種別「セキュリティ」
「メールが有効なセキュリティ」
「配布リスト」
「Office365」
のいずれかの値を指定
GroupNameグループ名日本語使用可
Description説明欄日本語使用可
PrimarySmtpAddressメールアドレス日本語使用不可
Aliasエイリアス日本語使用不可
※通常はメールアドレスの「@」以前と
同じにするとわかりやすい
RequireSenderAuthenticationEnabled外部からメールを受け付けるかどうかTrue:受け付けない
False:受け付ける

必要なパラメータを入れて「Add-Office365Groups.ps1」と同じフォルダ階層に配置したら準備完了。
後はスクリプトを実行すれば各グループが作成される。
(注)事前準備は省いています。詳しくは「(Office365)Powershellにてユーザーを一括登録する方法を検証してみた 〜New-MsolUser〜」に載せています。

また、ExchangeOnlineに接続する時のセッション作成時にプロキシ環境だった場合には「#接続(リモートセッションの作成) プロキシ環境の場合」を代わりに実行して下さい。
(コマンド例ではコメントアウトさせています。)

ちなみに今回セキュリティグループを作成するコマンドに「New-MsolGroup」を使用しています。
これは単純に資格情報を入力する手間を1回で済ませたかったからです。

実行するとCSVファイルの「Type」列を見てどの種類のグループを作成するかを判断して、それぞれ必要なコマンドを実行しています。
最後にグループ全体を出力するコマンドをログに残している。

ログの出力例はこんな感じ↓↓↓
セキュリティグループ「営業部Gr」を作成.
セキュリティグループ「開発部Gr」を作成.
セキュリティグループ「総務部Gr」を作成.
メールが有効なセキュリティグループ「営業部Gr-Mail」を作成.
メールが有効なセキュリティグループ「開発部Gr-Mail」を作成.
メールが有効なセキュリティグループ「総務部Gr-Mail」を作成.
配布リストグループ「営業部グループメール」を作成.
配布リストグループ「開発部グループメール」を作成.
配布リストグループ「総務部グループメール」を作成.
Office365グループ「営業部-Office365グループ」を作成.
Office365グループ「開発部-Office365グループ」を作成.
Office365グループ「総務部-Office365グループ」を作成.


===グループの一覧出力結果===

DisplayName                   Description                         EmailAddress
-----------                   -----------                         ------------
CMD-AzureADGroup-SecurityOnly New-AzureADGroupコマンドで作成したセキュリティグループ             
CMD-New-MsolGroup-Security    New-MsolGroupコマンドを使用して作成したグループ                  
TEST管理 グループ                   TEST管理 グループ                                     
TEST管理 グループ2                  TEST管理 グループ2                                    
TEST管理 グループ3                  TEST管理 グループ3                                    
営業部Gr                         営業部のセキュリティグループ                                  
開発部Gr                         開発部のセキュリティグループ                                  
総務部Gr                         総務部のセキュリティグループ                                  



DisplayName     GroupType                  PrimarySmtpAddress                              RequireSenderAuthenticationEnabled
-----------     ---------                  ------------------                              ----------------------------
CMD-HaihuList1  Universal                  CMD-HaihuList1@〜.jp                                           False
CMD-HaihuList2  Universal                  CMD-HaihuList2@〜.jp                                            True
TEST課 メールグループ   Universal, SecurityEnabled testka-mailgroup@〜.jp                                         False
TEST部 メール配布リスト  Universal                  testka-mailhaifulist@〜.jp                                      True
TEST部 メール配布リスト2 Universal                  testka-mailhaifulist2@〜.jp                                    False
営業部Gr-Mail      Universal, SecurityEnabled sales-gr@〜.onmicrosoft.com                                    False
営業部グループメール      Universal                  sales-gr-mail@〜.onmicrosoft.com                               False
開発部Gr-Mail      Universal, SecurityEnabled developments-gr@〜.onmicrosoft.com                              True
開発部グループメール      Universal                  developments-gr-mail@〜.onmicrosoft.com                        False
総務部Gr-Mail      Universal, SecurityEnabled general-gr@〜.onmicrosoft.com                                   True
総務部グループメール      Universal                  general-gr-mail@〜.onmicrosoft.com                              True



DisplayName          GroupType PrimarySmtpAddress                                  RequireSenderAuthenticationEnabled
-----------          --------- ------------------                                  ----------------------------------
TEST課 Office365グループ  Universal testka-office365group@〜.onmicrosoft.com                                 False
TEST課 Office365グループ2 Universal testka-office365group2@〜.onmicrosoft.com                                 True
営業部-Office365グループ    Universal sales-office365gr@〜.onmicrosoft.com                                     False
開発部-Office365グループ    Universal developments-office365gr@〜.onmicrosoft.com                              False
総務部-Office365グループ    Universal general-office365gr@〜.onmicrosoft.com                                    True


===グループの一覧出力結果===

ログ出力について「Format-Table」で整形しているつもりですが、行によってはずれてしまうのはもうしょうがないかなと思い、諦めました。。。。orz


今回の検証はこれで完了。
今回Powershellコマンドで「switch」を使用したのが初めてだったのですごく勉強になりました。
If文でも出来るけど今回はswitchの方がしっくり来る感じでした!!!


スポンサードリンク