PowerShell Core(PowerShell 7)で Microsoft 365 のユーザーを一括登録する

2022年11月8日

以前にPowerShell で Microsoft 365 のユーザーを一括登録するで Windows 10 に標準でインストールされている PowerShell(PowerShell 5)で Microsoft 365 のユーザーを一括登録する方法を紹介しましたが、ようやく PowerShell Core(PowerShell 7)で一括登録することができるようになったので、その方法を紹介します。

準備と注意

以下の手順で一括登録するためには、PowerShell 5.1 以上を使う必要があります。Windows 10 Anniversary Update に搭載されているのが PowerShell 5.1 なので、Windows 10 をきちんと更新していれば使えるはずです。とはいえ、PowerShell 5.1 であれば、従来の MSOnline モジュールを使えばよいので、PowerShell 7(PowerShell Core)で使う人向けです。

  1. .NET Framework 4.7.2 以上をインストールする
  2. Windows PowerShell を管理者として実行し、以下のコマンドを実行する
    1. Install-Module Microsoft.Graph コマンドを実行
    2. NuGet プロバイダーをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押す
    3. PSGallery からモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、Enter を押す
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

上記のようなメッセージが表示されたら、「A」を入力し、Enter を押してください。

ここまでで準備は完了です。この先は管理者でなくても問題ありません。

CSV の準備

以下の内容で CSV を作成します。文字コードは UTF-8、改行コードは CRLF で。後でパスを指定することになるので、わかりやすい場所に保存しておきます(C:\temp\user.csv など)。

UserPrincipalName,MailNickname,DisplayName,FirstName,LastName,Password,UsageLocation,SkuPartNumber
t.yamada@example.com,t.yamada,山田 太郎,太郎,山田,Pass1234,JP,O365_BUSINESS_ESSENTIALS

SkuPartNumber の部分が割り当てたいライセンスの種類です。完全なリストは、ライセンスのための製品名とサービスプラン識別子で確認できますが、主なものは以下の通りです。Microsoft Teams Essentials(AAD アイデンティティ)は、上記のリンクにサービスプラン識別子が記載されていないので要注意です。

O365_BUSINESS
Microsoft 365 Apps for Business
O365_BUSINESS_ESSENTIALS
Microsoft 365 Business Basic
O365_BUSINESS_PREMIUM
Microsoft 365 Business Standard
TEAMS_ESSENTIALS_AAD
Microsoft Teams Essentials(AAD アイデンティティ)

一括登録の実行

いよいよ一括登録の実行です。以下のコマンドを実行します。

Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All
# Microsoft 365 のログイン情報を入力

Import-Csv -Path C:\temp\user.csv | foreach {New-MgUser -AccountEnabled -UsageLocation $_.UsageLocation -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName -Surname $_.LastName -GivenName $_.FirstName -MailNickname $_.MailNickname -PasswordProfile @{"Password"=$_.Password;ForceChangePasswordNextSignIn=$false}; $Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq $_.SkuPartNumber; Set-MgUserLicense -UserId $_.UserPrincipalName -AddLicenses @{SkuId = $Sku.SkuId} -RemoveLicenses @()}

ForceChangePasswordNextSignIn=$False を付けることで、設定したパスワードをそのまま使うことができます。ForceChangePasswordNextSignIn=$True にすると、初回ログイン時にパスワードの設定を要求されるようになります。

New-MsolUser コマンドレットと比較すると、-MailNickname が必須になっているのが大きな違いです。64文字以内で設定しますが、重複しないようにメールアドレスの @ の前の部分で設定しておくのがよいでしょう。他に設定できるパラメータについては、ヘルプをご覧ください。

ライセンス割り当て後の言語設定などについては、PowerShell で Microsoft 365 のユーザーを一括登録すると同じです。PowerShell Core でユーザー作成から言語設定までできるようになるのは便利ですが、Set-MailboxRegionalConfiguration コマンドレットを使用するためには、別途ログインが必要なのが少々面倒です。

この記事を書いた人

グッドネイバー

“ Webに悩むお客さまの「よき隣人」でありたい ” をモットーに、Web システム開発(主に Laravel)、Web マーケティング支援の仕事をしています。詳しい業務内容はこちら。お仕事のご依頼・ご相談はこちらからお気軽にどうぞ。