【Microsoft Graph PowerShell SDK】Entra IDユーザー作成からグループ割当を自動化

Entra IDを組織で効率的に運用するためには、ユーザーの大量作成と適切なグループ管理が欠かせません。

本記事では、Microsoft Graph PowerShell SDKを活用し、CSVファイルの情報をもとにEntra IDユーザーを任意のグループに一括作成する方法をご紹介します。

Graphモジュールの導入

Graphモジュールが未インストールの場合、PowerShellを起動し、以下コマンドレットを実行します。実行ポリシーの変更が表示されるので、[Y]をクリックします。

※ セキュリティに関わる設定なので、利用環境のセキュリティポリシーなどをご確認ください

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

続いて、以下のコマンドレットを実行し、Graphモジュールをインストールします。

Install-Module Microsoft.Graph -Scope CurrentUser -Repository PSGallery -Force
Get-InstalledModule | Where-Object { $_.Name -like "Microsoft.Graph*" } #インストール確認

ユーザー・グループの作成

グループの作成

本項目では、セキュリティグループ作成スクリプトを紹介します。

今回利用するcsvデータは以下の通りです。なお、Excelで作成する場合、文字コードは「CSV UTF-8(コンマ区切り)」で保存してください。「CSV UTF-8」形式だと、文字化けが発生します。

DisplayName Description MailNickname securityEnabled IsAssignableToRole
営業部グループ 営業部門のメンバー用グループ salese_team TRUE FALSE
技術部グループ 技術部門のメンバー用グループ engineering_team TRUE FALSE
IT管理者グループ IT部門の管理者用グループ it_admin TRUE TRUE

Powershellを開き、以下スクリプトを実行します。

Connect-MgGraph -Scopes "Group.ReadWrite.All", "Directory.ReadWrite.All", "RoleManagement.ReadWrite.Directory"

# CSVファイルの読み込み
$csvPath = "C:\work\グループ情報.csv"
$groups = Import-Csv -Path $csvPath -Encoding UTF8

foreach ($group in $groups) {
    try {
        $groupParams = @{
            DisplayName     = $group.DisplayName
            Description     = $group.Description
            MailNickname    = $group.MailNickname
            MailEnabled     = $false
            SecurityEnabled = $true
            IsAssignableToRole    = [bool]::Parse($group.IsAssignableToRole)
            GroupTypes      = @()
       }

        $newGroup = New-MgGroup -BodyParameter $groupParams
        Write-Host "○ グループ '$($group.DisplayName)' 作成完了"
    }
    catch {
        Write-Host "× グループ '$($group.DisplayName)' の作成に失敗しました: $_"
    }
}

テナント内グループ一覧を取得する場合は、以下のコマンドレットを実行します。

Get-MgGroup -All | fl DisplayName,Id,Description,IsAssignableToRole

IT管理者グループはグループに対するロール付与を可能としているので、Entra ID管理センター上で対象グループのプロパティを確認すると以下のようになっています。

※グループの作成後は、ロール付与可否設定の変更ができないので注意してください。

ユーザーの作成

ここでは、新規ユーザーの一括作成及びグループへの追加を一度にできるスクリプトをご紹介します。

今回利用するcsvデータは以下の通りです。

DisplayName UserPrincipalName MailNickname Password givenName surname jobTitle department telephoneNumber mobile
日本 ビジ郎 bijiro.nihon@example.com bijiro.nihon P@ssw0rd123 ビジ郎 日本 マネージャー 営業部 000--XXXX-XXX1
港 虎子 torako.minato@example.com torako.minato P@ssw0rd456 虎子 営業部 000-XXXX-XXX2 000-XXXX-XXX3

csvに記載のユーザーを「対象グループ」に追加していきます。Powershellを開き、以下スクリプトを実行します。

Connect-MgGraph -Scopes "User.ReadWrite.All", "Group.ReadWrite.All"

# CSVファイルの読み込み(カラム名: DisplayName, UserPrincipalName, MailNickname, Password)
$csvPath = "C:\work\ユーザー情報.csv"
$users = Import-Csv -Path $csvPath

$groupId = "GroupID" #ユーザーを追加したいグループのグループID


foreach ($user in $users) {
    try {
        $userParams = @{
        # 必須項目
            AccountEnabled    = $true
            DisplayName       = $user.DisplayName
            MailNickname      = $user.MailNickname
            UserPrincipalName = $user.UserPrincipalName
            PasswordProfile   = @{
                ForceChangePasswordNextSignIn = $true
                Password = $user.Password
            }
        }

        # オプション項目(空欄の場合追加無し)
        if (![string]::IsNullOrWhiteSpace($user.givenName))  { $userParams.givenName  = $user.givenName }
        if (![string]::IsNullOrWhiteSpace($user.surname))    { $userParams.surname    = $user.surname }
        if (![string]::IsNullOrWhiteSpace($user.jobTitle))   { $userParams.jobTitle   = $user.jobTitle }
        if (![string]::IsNullOrWhiteSpace($user.department)) { $userParams.department = $user.department }
        if (![string]::IsNullOrWhiteSpace($user.telephoneNumber))    { $userParams.surname    = $user.telephoneNumber}
        if (![string]::IsNullOrWhiteSpace($user.mobile))   { $userParams.jobTitle   = $user.mobile}
  
        # ユーザー作成
        $newUser = New-MgUser -BodyParameter $userParams

        # グループに追加
        New-MgGroupMember -GroupId $groupId -DirectoryObjectId $newUser.Id

        Write-Host "○ ユーザー '$($user.DisplayName)' 作成およびグループ追加完了"
    }
    catch {
        Write-Host "× ユーザー '$($user.DisplayName)' の作成またはグループ追加に失敗しました: $_"
    }
}

グループのメンバーを表示するには以下スクリプトを実行します。

$groupId = "GroupID" #ユーザーを追加したいグループのグループID
$members = Get-MgGroupMember -GroupId $groupId

foreach ($member in $members) {
    Get-MgUser -UserId $member.Id
}

※Get-MgGroupMemberコマンドはメンバーユーザーのIDを表示するので、ユーザーIDを表示名に変換する処理を追加しています。

おわりに

今回ご紹介したスクリプトを活用することで、作業時間の短縮やヒューマンエラーの軽減が可能です。

本記事が皆さまの環境でのユーザー管理に少しでも役立てば幸いです。

執筆担当者プロフィール
村上 綾香

村上 綾香(日本ビジネスシステムズ株式会社)

金融・保険事業本部 クラウドインテグレーション部に所属。 主にMicrosoft 365製品を扱っています。

担当記事一覧