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を表示名に変換する処理を追加しています。
おわりに
今回ご紹介したスクリプトを活用することで、作業時間の短縮やヒューマンエラーの軽減が可能です。
本記事が皆さまの環境でのユーザー管理に少しでも役立てば幸いです。