Office 365 のライセンス管理

こんにちは。いつも 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 への接続
/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 の場合(サービスプランは、2019/03/14 時点の情報です)
(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
MYANALYTICS_P2 Success <<<MyAnalytics

 

▼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}

既存設定のままで、指定したサービスプランのみ有効化 / 無効化するには、PowerShell Gallery にて公開されている
Update-MSOLUserLicensePlan モジュールを使用する方法も有効ですので、ご紹介いたします。

MSOLLicenseManagement
https://www.powershellgallery.com/packages/MSOLLicenseManagement/

※このPowerShell モジュールは、弊社エンジニアが公開しておりますが、サポート サービスは提供されておらず、動作を保証するものではございません。
ご利用いただく際には十分に動作試験を実施いただきますようお願いいたします。
また、その他の権利については PowerShell Gallery に記載された内容に準じますので、予めご注意ください。

 

--------------------------------------------------------------------------------------------

シナリオ 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 ファイルをエクスポートする方法が有効です。

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

Export-Office365LicenseStatus のご紹介
URL:https://blogs.technet.microsoft.com/exchangeteamjp/2018/05/29/introducing_export-office365licensestatus/

 

--------------------------------------------------------------------------------------------

参考情報

--------------------------------------------------------------------------------------------
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 サービスに関する有益な情報を発信してまいりますので、弊社サポート ブログをよろしくお願いいたします。