どうもミツシマです。

前回「(Office365)各グループの作成をPowershellコマンドで実施する方法を検証してみた」でグループの作成を検証したので、今回は作成したセキュリティグループに一括でユーザーを追加する方法をPowershellコマンドで検証してみた。
(注)メールアドレスを持つグループや配布リスト等は別コマンドなので次回ご紹介予定である。

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


〜検証〜

今回使用するコマンドは「Graph 用 Azure Active Directory PowerShell (コマンドレット名に AzureAD が含まれる)」
もう一つ「Windows PowerShell 用 Microsoft Azure Active Directory モジュール (コマンドレット名に MSol が含まれる)」というのもあるが、個人的にGraph用の方がしっくり来るので。
(注)どちらのコマンドでも出来るはずである。


で試行錯誤して出来たスクリプトがこちら↓↓↓


〜Add-AzureADGroupMember.ps1〜

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

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

#AzureADへ接続
Connect-AzureAD | Out-Null

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

#全ユーザー情報と全グループ情報を取得
$AllAzureADUser = Get-AzureADUser
$AllAzureADGroup = Get-AzureADGroup

foreach($TxtInfo in $AllTxtInfo){

    #ファイル名(グループ名)を取得する
    $AzureADGroupName = [String]$TxtInfo.BaseName
    
    #メンバーを追加する対象グループを取得
    $AzureADGroup = $AllAzureADGroup | Where-Object {$_.DisplayName -eq $AzureADGroupName}

    #ファイルを読み込む
    $TxtContent = (Get-Content -Path $TxtInfo.PSPath) -as [string[]]
    
    #ファイルを1行ずつ読みこんでユーザーをグループに追加する
    foreach($AzureADUserName in $TxtContent){
        
        #個別のユーザーオブジェクトIDを取得
        $AzureADUser = $AllAzureADUser | Where-Object {$_.DisplayName -eq $AzureADUserName}

        #出力確認
        [String]$strMessage = "グループ「" + $AzureADGroup.DisplayName + "」にユーザー「" + $AzureADUser.DisplayName + "」を追加します."
        Write-Output $strMessage

        #グループにメンバーを追加
        Add-AzureADGroupMember -ObjectId $AzureADGroup.ObjectId -RefObjectId $AzureADUser.ObjectId

    }

    #ユーザー追加後の情報確認
    Write-Output "${AzureADGroupName}のメンバー一覧を表示します。"
    Get-AzureADGroupMember -ObjectId $AzureADGroup.ObjectId | Select-Object ObjectId,DisplayName,UserPrincipalName,UserType  | Sort-Object DisplayName | Format-Table
}

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


〜解説〜

事前準備としてPCで一回「Install-Module -Name AzureAD」を実行する必要アリ!

グループにユーザーを追加するコマンドは「Add-AzureADGroupMember
一括で設定するためにcsvファイルを作成して「Import-CSV」コマンドでやることが個人的によくあるが、今回は違う方法でやっている。
上記スクリプトファイルと同じフォルダ階層に「SecurityGroup」フォルダを作成し、そのフォルダに一括設定したいグループ名と同じテキストファイルを作成する。
後はテキストファイルの中に追加したいユーザー名(表示名)を1行ずつ入れていく!!
(注)ユーザープリンシパル名でなく、表示名!!

フォルダ階層はこんな感じ↓↓↓
エクスプローラ画面1

エクスプローラ画面2


上記例では「TEST管理 グループ.txt」・「TEST管理 グループ2.txt」・「TEST管理 グループ3.txt」を事前に作成している。
中身はこんな感じ↓↓↓
・TEST管理グループ.txt
test 01
test 02
test 03
test 04
test 05
test 06
test 07
test 08
test 09
test 10
管理者


これで準備OK!!
コマンドを実行すると「SecurityGroup」フォルダ配下のファイルを一覧で取得し、それぞれのファイル名(グループ名)を取得。
その後、実際に存在するAzureADのグループと突き合わせて「ObjectId」を取得する。
更にファイルを読み込んでユーザー名(表示名)を取得し、こちらも実際に存在するAzureADユーザーと突き合わせて「ObjectId」を取得する。
後は「Add-AzureADGroupMember」で追加している感じだ。
最後に追加されたか確認するために「Get-AzureADGroupMember」を実行している。

(注)実際に実行する際には一度「Add-AzureADGroupMember」はコメントアウトして、出力確認をみて正しいことを確認することをオススメする


実際に実行した画面がこちら↓↓↓

コマンド結果1
コマンド結果2


今回の検証はこれで終了。
次回はメールアドレスを持つグループの追加方法を検証した結果を載せたいと思う。
スポンサードリンク