どうもミツシマです。
以前「(Office365)セキュリティグループにユーザーを一括追加(設定)する方法を検証してみた 〜Powershell〜」を検証していましたが、今回はセキュリティグループも含めて4つすべてのグループをPowershellコマンドで一括作成するコマンドを検証してみました。
検証環境は以下の通り
PC:Windows10
こんな感じ。
で色々検証して作成したスクリプトがこちら↓↓↓
CSVファイルで必要なパラメータを準備しています。
それぞれのパラメータはこんな感じです。
必要なパラメータを入れて「Add-Office365Groups.ps1」と同じフォルダ階層に配置したら準備完了。
後はスクリプトを実行すれば各グループが作成される。
(注)事前準備は省いています。詳しくは「(Office365)Powershellにてユーザーを一括登録する方法を検証してみた 〜New-MsolUser〜」に載せています。
また、ExchangeOnlineに接続する時のセッション作成時にプロキシ環境だった場合には「#接続(リモートセッションの作成) プロキシ環境の場合」を代わりに実行して下さい。
(コマンド例ではコメントアウトさせています。)
ちなみに今回セキュリティグループを作成するコマンドに「New-MsolGroup」を使用しています。
これは単純に資格情報を入力する手間を1回で済ませたかったからです。
実行するとCSVファイルの「Type」列を見てどの種類のグループを作成するかを判断して、それぞれ必要なコマンドを実行しています。
最後にグループ全体を出力するコマンドをログに残している。
ログの出力例はこんな感じ↓↓↓
ログ出力について「Format-Table」で整形しているつもりですが、行によってはずれてしまうのはもうしょうがないかなと思い、諦めました。。。。orz
今回の検証はこれで完了。
今回Powershellコマンドで「switch」を使用したのが初めてだったのですごく勉強になりました。
If文でも出来るけど今回はswitchの方がしっくり来る感じでした!!!
以前「(Office365)セキュリティグループにユーザーを一括追加(設定)する方法を検証してみた 〜Powershell〜」を検証していましたが、今回はセキュリティグループも含めて4つすべてのグループをPowershellコマンドで一括作成するコマンドを検証してみました。
検証環境は以下の通り
PC:Windows10
〜検証〜
まずそれぞれのグループ作成に使用するコマンドを確認。こんな感じ。
で色々検証して作成したスクリプトがこちら↓↓↓
〜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の方がしっくり来る感じでした!!!
スポンサードリンク
コメント
コメント一覧 (2)
はじめまして。
ExchangeOnlineの階層型アドレス帳についていろいろ調べておりましたら、ミツシマ様のBlogを見つけて参考にさせていただき非常に助かっております。
誠に恐れ入りますが、一つ教えていただきたいことがございます。
こちらの記事で、1階層目のグループ一括登録のPowershellコマンドは理解できたのですが、例えば階層型アドレス帳にそれぞれもう1階層下にグループがあった場合の一括登録する方法を教えていただけませんでしょうか。
お忙しいところ恐れ入りますが、何卒よろしくお願い申し上げます。
ミツシマ
がしました