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