みなさん、こんにちは!ネットワールドSEの松原です。
今回はM365のテナント内の複数ユーザーにライセンスを一括で割り当てる方法を紹介します。
※複数ユーザーにライセンスを割り当てたいとき、よくある方法としてはグループ単位でのライセンス割り当てがありますが、今回はユーザー単位で割り当てたいときに、コマンドで一括で割り当てる方法を紹介します。
1.【事前準備】Microsoft Graph APIに接続
①以下の記事を参考に、Microsoft Graph PowerShell用のモジュールのインストールをします。
※すでにインストール済みの場合は②以降を実施ください。
②Windows Powershellを右クリックし、[管理者として実行]をクリックします。
③以下のコマンドを実行するとサインイン画面が出てくるため、管理者ユーザーのIDとパスワードを入力します。
【コマンド】
Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All"
画面イメージ


④以下のコマンドを実行し、モジュールをインポートします。
【コマンド】
Import-Module -Name Microsoft.Graph.Users
2.テナントのライセンス情報を確認する
以下のコマンドを実行し、テナントで契約しているライセンスのSKU IDを確認します。
【コマンド】
Get-MgSubscribedSku | ft Id, SkuId, SkuPartNumber -Wrap
今回の例では以下の3つのライセンス情報が記載されています。
- Microsoft Power Automate Free
- f30db892-07e9-47e9-837c-80727f46fd3d
- Microsoft Teams Enterprise
- 7e31c0d9-9551-471d-836f-32ee72be4a01
- Microsoft 365 E5(Teamsなし)
- 18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e
画面イメージ

3.(ライセンスの中に無効にしたいサービスがある場合)ライセンスに含まれているサービスを確認する
割り当てたいライセンスの中にある一部のサービスを無効にしたい場合は、以下のコマンドを実行してライセンスに含まれるサービスを確認します。無効にしたいサービスのServicePlanIDをメモしておきます。
【コマンド】
Get-MgSubscribedSku | ForEach-Object {
$sku = $_
$sku.ServicePlans | Select-Object @{Name="SkuPartNumber";Expression={$sku.SkuPartNumber}}, ServicePlanName, ServicePlanId
}
画面イメージ

4.ライセンスを割り当てたいユーザーを記載したcsvファイルを用意する
ライセンスを割り当てたいユーザーについて、csvファイルを用意します。
csv例
| UserPrincipalName |
| cloud01@hogehoge.com |
| cloud02@hogehoge.com |
名前を付け、任意のパスに保存します。
5.ライセンスを割り当てるユーザーに、[利用場所]が設定されているか確認する
ライセンスを割り当てるにあたって、あらかじめユーザーに利用場所が設定されている必要があります。Entra ID管理センターで設定確認ができるため、確認方法を紹介します。
①管理者アカウントでEntra ID管理センターにサインインします。
②左のタブから[ユーザー]をクリックします。
③ライセンスを割り当てるユーザーを検索し、[プロパティ]を開きます。[利用場所]に国が記載されているか確認してください。記載されていなかった場合は、④手順を実施ください。記載されている場合はそのまま手順6.に進んでください。
④(③で[利用場所]が設定されていなかった場合)コマンドでユーザーの利用場所を設定します。
- 利用場所を設定したいユーザーのcsvファイルを用意します。
csv例
UserPrincipalName cloud01@hogehoge.com cloud02@hogehoge.com
- 以下のコマンドを実行し、利用場所を設定します。今回は日本想定なのでJPを指定します。
【コマンド】
Import-Csv "<csvファイルのパス>" | ForEach-Object {
Set-MgUser -UserId $_.UserPrincipalName -UsageLocation "JP"
}
⑤ ④手順が完了したら、もう一度Entra ID管理センターに入り、ページを更新してユーザーのプロパティに[利用場所]が設定されていることを確認します。
6.ライセンスを割り当てる
以下のコマンドを実行し、ライセンスの割り当てを実施します。
※無効にするサービスプラン、および削除するライセンスが無い場合でも、実行例のように「DisabledPlans = @()」および「-RemoveLicenses @() 」はコマンドに記載するようにします。
【コマンド】
$License1 = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "<割り当てるライセンスのSKU ID>"; DisabledPlans = @("<無効にするサービスプランのservicePlanID>")}
Import-Csv <csvファイルのパス> | ForEach-Object { Set-MgUserLicense -UserId $_.UserPrincipalName -AddLicenses @($License1) -RemoveLicenses @("<削除するライセンスのSKU ID>") }
【実行例】
以下の例は、Microsoft Power Automate Free、Microsoft Teams Enterprise、Microsoft 365 E5(Teamsなし)の3つのライセンスについて割り当てるコマンド例です。
$License1 = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "f30db892-07e9-47e9-837c-80727f46fd3d"; DisabledPlans = @()}
$License2 = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "7e31c0d9-9551-471d-836f-32ee72be4a01"; DisabledPlans = @()}
$License3 = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "18a4bd3f-0b5b-4887-b04f-61dd0ee15f5e"; DisabledPlans = @()}Import-Csv C:\temp\Users.csv | ForEach-Object { Set-MgUserLicense -UserId $_.UserPrincipalName -AddLicenses @($License1, $License2, $License3) -RemoveLicenses @() }
以上でライセンス割り当て完了です!