Office 365 のライセンス管理

Last Update:

❗ 2021/11/04 Update
本記事では MSOnline モジュールを使用したライセンス管理方法を紹介しています。Microsoft Graph PowerShell SDK を使用したライセンス管理についてはこちらをご参照ください。

こんにちは。いつも Office 365 を利用いただきまして、ありがとうございます。
今回は、Office 365 のライセンス管理について、ご紹介いたします。

 

Office 365 でユーザーにライセンスを付与するには、GUI(Office 365 管理センター)で操作する方法と、PowerShell で操作する方法があります。
少人数の作業であれば前者で問題ありませんが、ユーザーが多い場合や、スクリプトとして実行したいような場合は後者の方法が有効です。

 

よくあるお問い合わせのシナリオに沿って、ライセンス管理の PowerShell コマンドをご案内いたします。
ライセンス名やサービスプランを変更することによって応用が可能です。

 

事前準備(必須)

下記の作業は、どのシナリオにおいても共通です。

▼Office 365 に PowerShell 接続します。
下記の公開情報に従って Azure Active Directory の PowerShell モジュール(MSOnline)をインストールします。

Azure Active Directory の PowerShell モジュール
https://blogs.technet.microsoft.com/jpazureid/2017/12/04/aad-powershell/

Office 365 PowerShell への接続
https://docs.microsoft.com/ja-jp/office365/enterprise/powershell/connect-to-office-365-powershell

その後、Connect-MsolService コマンドを実行し、管理者権限で Office 365 に接続します。

▼Office 365 テナントに紐づくライセンスの情報を確認します。
Get-MsolAccountSku コマンドを実行し、ライセンスの AccountSkuId を確認します。

コマンド実行例:

AccountSkuId ActiveUnits WarningUnits ConsumedUnits
------------ ----------- ------------ -------------
contoso:STANDARDPACK 100 0 10 <<<Office 365 Enterprise E1
contoso:ENTERPRISEPACK 100 0 10 <<<Office 365 Enterprise E3
contoso:ENTERPRISEPREMIUM 100 0 10 <<<Office 365 Enterprise E5
・・・

▼ユーザーの UsageLocation を設定します。
ライセンスを割り当てるユーザーは、事前に UsageLocation が設定されている必要があります。設定されていない場合にはライセンス割り当てに失敗します。
そのため、はじめてライセンス割り当てを行うユーザーの場合は、事前に次のコマンドで UsageLocation を設定します。

下記のコマンドを実行し、特定のユーザーの UsageLocation を ”JP” に設定します。

Set-MsolUser -UserPrincipalName <対象ユーザーの UPN> -UsageLocation “JP”

下記のコマンドを実行し、csv ファイル(後述)に記載されたユーザーの UsageLocation を ”JP” に一括設定します。

Import-Csv <csv ファイル名> | ForEach-Object {Set-MsolUser -UserPrincipalName $_.UserPrincipalName -UsageLocation “JP”}

- 参考情報
UsageLocation は、ISO 3166-1 alpha-2 (A2) の 2 文字の国/地域コードを指定します。
https://www.iso.org/obp/ui/#search/code/

事前準備(任意)

csv ファイルを使用してライセンスの一括割当・変更を行う場合は、下記を事前準備として実施ください。

▼全ユーザーの UserPrincipalName 一覧を csv ファイルに出力します。

Get-MsolUser -all | Select-Object UserPrincipalName | export-csv <出力先の csv ファイル> -Encoding UTF8 -NoTypeInformation

▼特定ライセンスが付与されているユーザーの UserPrincipalName 一覧を csv ファイルに出力します。

Get-MsolUser | where {$_.Licenses.AccountSkuID -contains “<対象ライセンスの AccountSkuId>”} | Select-Object UserPrincipalName | export-csv <出力先の csv ファイル> -Encoding UTF8 -NoTypeInformation

コマンド実行例:※E1 ライセンスが付与されているユーザーの一覧を c:\temp\users.csv ファイルに出力する場合

Get-MsolUser | where {$_.Licenses.AccountSkuID -contains “contoso:STANDARDPACK”} | Select-Object UserPrincipalName | Export-Csv “C:\Temp\users.csv” -encoding UTF8 -NoTypeInformation

csv ファイルは、下記の形式で作成されます。
ライセンス割当・変更を行う対象ユーザーが事前に分かっている場合は、手動作成でも問題ありません。


UserPrincipalName
testuser01@contoso.onmicrosoft.com
testuser02@contoso.onmicrosoft.com
・・・


ユーザーにライセンスを付与する際、特定のサービスプランのみ有効化する場合は、下記を事前準備として実施ください。

▼作業対象ライセンスに含まれるサービスプランの情報を確認します。

(Get-MsolAccountSku | where {$_.AccountSkuId -eq “<確認したいライセンスの AccountSkuId>”}).ServiceStatus

コマンド実行例: ※Office 365 Enterprise E3 の場合(サービスプランは、2018/03/28 時点の情報です)

(Get-MsolAccountSku | where {$_.AccountSkuId -eq “contoso:ENTERPRISEPACK”}).ServiceStatus

 

ServicePlan ProvisioningStatus
----------- ------------------
RMS_S_ENTERPRISE Success <<<Azure Rights Management
EXCHANGE_S_ENTERPRISE Success <<<Exchange Online (Plan 2)
FLOW_O365_P2 Success <<<Flow for Office 365 Plan 2
FORMS_PLAN_E3 Success <<<Microsoft Forms (Plan E3)
PROJECTWORKMANAGEMENT Success <<<Microsoft Planner
Deskless Success <<<Microsoft StaffHub
STREAM_O365_E3 Success <<<Microsoft Stream for O365 E3 SKU
TEAMS1 Success <<<Microsoft Teams
INTUNE_O365/th> Success <<<Mobile Device Management for Office 365
OFFICESUBSCRIPTION Success <<<Office 365 ProPlus
SHAREPOINTWAC Success <<<Office Online
POWERAPPS_O365_P2 Success <<<PowerApps for Office 365 Plan 2
SHAREPOINTENTERPRISE Success <<<SharePoint Online (Plan 2)
MCOSTANDARD Success <<<Skype for Business Online (Plan 2)
SWAY Success <<<Sway
BPOS_S_TODO_2 Success <<<To-Do (Plan 2)
YAMMER_ENTERPRISE Success <<<Yammer Enterprise
 

▼PowerShell 上で変数 disabledplans を作成し、無効とするサービス プランの情報を変数に格納します。
下記のコマンドを実行し、割り当てるライセンスのうち、無効にするサービスを指定し、変数 disabledplans に格納します。
$disabledplans = New-Object System.Collections.Generic.List[string]
$disabledplans.Add(“<無効にする ServicePlan>”)
$disabledplans.Add(“<無効にする ServicePlan>”)
・・・
$licenses = New-MsolLicenseOptions -AccountSkuId “<割り当てるライセンスの AccountSkuId>” -DisabledPlans $disabledplans

コマンド実行例:
※contoso:ENTERPRISEPACK ライセンスを割り当てる際に、Microsoft Teams、Sway、Yammer Enterprise を無効にする場合
$disabledplans = New-Object System.Collections.Generic.List[string]
$disabledplans.Add(“TEAMS”)
$disabledplans.Add(“SWAY”)
$disabledplans.Add(“YAMMER_ENTERPRISE”)
$licenses = New-MsolLicenseOptions -AccountSkuId “contoso:ENTERPRISEPACK” -DisabledPlans $disabledplans

シナリオ A. 新規ユーザーにライセンスを割り当てます。

▼特定のユーザーに対して、全てのサービスプランを有効化してライセンスを付与します。

Set-MsolUserLicense -UserPrincipalName <UPN> -AddLicenses “<付与ライセンスの AccountSkuId>”

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses “<付与ライセンスの AccountSkuId>”}

▼一部のサービスのみ有効化してライセンスを付与します。

Set-MsolUserLicense -UserPrincipalName <UPN> -AddLicenses “<付与ライセンスの AccountSkuId>” -LicenseOptions $licenses

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -AddLicenses “<付与ライセンスの AccountSkuId>” -LicenseOptions $licenses}

シナリオ B. ユーザーからライセンスを削除します。

▼特定のユーザーに対して、ライセンスを削除します。

Set-MsolUserLicense -UserPrincipalName <UPN> -RemoveLicenses <”削除ライセンスの AccountSkuId”>

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -RemoveLicenses “<削除ライセンスの AccountSkuId>”}

シナリオ C. 同一ライセンス内で、有効にするサービスプランを変更します。

▼特定のユーザーに対して、サービスプランを変更します。 ※AddLicenses オプションは使用しません。

Set-MsolUserLicense -UserPrincipalName <UPN> -LicenseOptions $licenses

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -LicenseOptions $licenses}

シナリオ D. ライセンス変更を行います。

▼特定のユーザーに対して、ライセンス変更を行います(変更後は、全てのサービスプランを有効化)

Set-MsolUserLicense -UserPrincipalName <UPN> -RemoveLicenses “<変更前の AccountSkuId>” -AddLicenses “<変更後の AccountSkuId>”

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -RemoveLicenses “<変更前の AccountSkuId>” -AddLicenses “<変更後の AccountSkuId>”}

▼特定のユーザーに対して、ライセンス変更を行います(変更後は、一部のサービスのみ有効化)

Set-MsolUserLicense -UserPrincipalName <UPN> -RemoveLicenses “<変更前の AccountSkuId>” -AddLicenses “<変更後の AccountSkuId>” -LicenseOptions $licenses

▼csv ファイルで指定したユーザーに対して、一括で処理するには、下記のコマンドを実行します。

Import-Csv -Path <csv ファイルのパス名> | ForEach-Object {Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -RemoveLicenses “<変更前の AccountSkuId>” -AddLicenses “<変更後の AccountSkuId>” -LicenseOptions $licenses}

事後確認

▼作業対象ユーザーのライセンス付与状況を確認します。

Get-MsolUser -UserPrincipalName <UPN> | Select-Object -ExpandProperty Licenses

▼サービスプランまで確認するには、下記のコマンドを実行します。

Get-MsolUser -UserPrincipalName <UPN> | Select-Object -ExpandProperty Licenses | Select-Object -ExpandProperty ServiceStatus

ユーザーのライセンス保持状況を確認するには、[Office 365 管理センター] - [アクティブなユーザー] にて csv ファイルをエクスポートする方法が有効です。

サンプルスクリプトも公開しておりますので、ご活用ください。

参考情報

Office 365 PowerShell を使用してライセンスをユーザー アカウントに割り当てる
https://technet.microsoft.com/ja-jp/library/dn771770.aspx

Office 365 PowerShell を使ったサービスへのアクセスを無効にする
https://technet.microsoft.com/ja-jp/library/dn771769.aspx

Windows PowerShell コマンドでの新規ユーザー一括作成手順 (ライセンス付与、パスワード同時設定)
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_o365admin-mso_manage/windows-powershell/b0dbbafd-ec0d-401f-9d88-b6b4fc72f6f6

今後も Office 365 サービスに関する有益な情報を発信してまいりますので、弊社サポート ブログをよろしくお願いいたします。