Office365のライセンスに含まれるアプリを1個だけ有効にする方法

Page content

こん○○は! 今年の1月に転職して新しい職場で働いています。すっかりWindowsとMicrosoft製品まみれの生活になってしまいました。 相変わらず情シスのお仕事をしているので各種ライセンスとアカウント管理をやってます。

今回はOffice365のライセンスに含まれるアプリを1個だけ有効にする方法を書きます。

Office365導入時はオンラインストレージなんて使わない!という方向でShare Pointを無効化してライセンス配布を行っていたけど、時代はゼロトラスト!とか急に方向が変わってSharePointを全ユーザ有効にしないといけないとか、そういうときに使えると思います。 全員のアプリの有効無効を全部同じ状態にする方法はググったら出てくるのですが、うちのテナントはユーザによって有効になっているアプリが違うので、Webブラウザでチェックを1個いれるのと同じことができないと困るのでPowerShellを書きました。

Webブラウザからライセンス管理をできるアカウントを持っていることを前提に書いてます。

全ユーザに○○したいならPowerShell

全ユーザが10人とか20人くらいならブラウザで設定ポチポチでいいと思うんですけど100人とかになってくるとつらいのでPowerShellでやります。 Windows PowerShellを開いて

Connect-MsolService

を実行してなんか赤い文字でエラーが出たらインストールが必要です。Windows Power Shellを右クリックして管理者として実行して

Install-Module MSOnline

を実行してモジュールをインストールしておきましょう。NuGetプロバイダーをインストールしてインポートするか?とPSGalleryを信頼するかと聞かれるので両方Yエンターではいを選びます。

あと、スクリプトを実行できるように

Set-ExecutionPolicy Unrestricted

も実行しておきます。

これでOffice365のアカウントの管理をPowerShellから行う準備ができました。

下準備

下準備1

Windows PowerShellで Connect-MsolService を実行してサインインした状態で

Get-MsolAccountSku | Select AccountName,SKUPartNumber

を実行します。

今回ユーザに対して有効にしたいアプリがどのライセンスに含まれるかあらかじめ調べてAccountNameとSKUPartNumberをメモしておきます。

PS C:\> Get-MsolAccountSku | Select AccountName,SKUPartNumber

AccountName      SkuPartNumber
-----------      -------------
reseller-account VISIOCLIENT
reseller-account STREAM
reseller-account WINDOWS_STORE
reseller-account ENTERPRISEPACK
reseller-account FLOW_FREE
reseller-account CCIBOTS_PRIVPREV_VIRAL
reseller-account EXCHANGESTANDARD
reseller-account EXCHANGEARCHIVE_ADDON

下準備2

Get-MsolAccountSku | Where{$_.SKUPartNumber -eq "下準備1で調べたSKUPartNumber"} | Foreach{$_.ServiceStatus}

を実行します。例えばOffice35 E3の場合は以下のようになります。 これから有効にしたいServicePlanをメモしておきます。どれが何のアプリかはこちらのサイトが詳しかったです。

Get-MsolAccountSku | Where{$_.SKUPartNumber -eq "ENTERPRISEPACK"} | Foreach{$_.ServiceStatus}

ServicePlan                  ProvisioningStatus
-----------                  ------------------
POWER_VIRTUAL_AGENTS_O365_P2 Success
CDS_O365_P2                  Success
PROJECT_O365_P2              Success
DYN365_CDS_O365_P2           Success
MICROSOFTBOOKINGS            Success
KAIZALA_O365_P3              Success
MICROSOFT_SEARCH             Success
WHITEBOARD_PLAN2             Success
MIP_S_CLP1                   Success
MYANALYTICS_P2               Success
BPOS_S_TODO_2                Success
FORMS_PLAN_E3                Success
STREAM_O365_E3               Success
Deskless                     Success
FLOW_O365_P2                 Success
POWERAPPS_O365_P2            Success
TEAMS1                       Success
PROJECTWORKMANAGEMENT        Success
SWAY                         Success
INTUNE_O365                  Success
YAMMER_ENTERPRISE            Success
RMS_S_ENTERPRISE             Success
OFFICESUBSCRIPTION           Success
MCOSTANDARD                  Success
SHAREPOINTWAC                Success
SHAREPOINTENTERPRISE         Success
EXCHANGE_S_ENTERPRISE        Success

スクリプトを準備する

https://github.com/nyomo/wintools/blob/main/microsoft365/AddSingleServicePlan.ps1 こちらにスクリプトを置いてあるのでRawボタンを押して開いたらCTRL+Sとかでデスクトップあたりに保存します。 ファイル名の末尾が.txtとかにならないように気をつけてください。

メモ帳で開いてこの辺のreseller-account:ENTERPRISEPACKSTREAM_O365_E3を下準備1と2で調べたものに書き換えます

# AccountSkuIdは Get-MsolAccountSku で調べて書き換える
$AccountSkuId = "reseller-account:ENTERPRISEPACK"
# EnabledPlanは (Get-MsolUser -UserPrincipalName メールアドレス).Licenses.ServiceStatus して出てきた一覧のServicePlanから1個選ぶ
# この例だとOffice365 E3に付属のStream for Office 365を有効にする
$EnabledPlan = "STREAM_O365_E3"

実行する

このスクリプトを実行するとテナント内でAccountSkuIdに指定されたライセンスを持っている全ユーザの指定のAppを有効にするので本当にそれでよいか考えて実行してください。

よければ、AddSingleServicePlan.ps1 をデスクトップに保存したなら PowerShellの画面で .\Desktop\AddSingleServicePlan.ps1 として実行するとマイクロソフトアカウントのサインイン画面がでて、サインインを行うと全アカウントに対しての処理が始まります。 処理中のユーザのメールアドレスが表示されるようになっています。

仕組みと解説

ここから下は読まなくて大丈夫です。 Office365のユーザやライセンスの管理を行うコマンドです

Get-MsolAccountSku

実行するとテナントで保有しているライセンスの一覧を取得できます。

Get-MsolUser

公式マニュアル

各ユーザアカウントの状態を確認することができます。このコマンドは実行しても何かの状態を変えるということはないので安心していろいろ試してみましょう。

以下のコマンドを実行すると有効なユーザを20件表示します

Get-MoslUser -EnabledFilter EnabledOnly -MaxResult 20

以下のように実行するとメールアドレスで指定したユーザの状態を確認することができます。

Get-MoslUser -UserPrincipalName メールアドレス | Format-List

また、以下のように実行するとメールアドレスで指定したユーザに割り当てたライセンスに対して何のAppが有効になっているかを確認することができます。

(Get-MsolUser -UserPrincipalName メールアドレス).Licenses.ServiceStatus

これは、ユーザ割当たっているライセンスの一覧を取得する方法です

(Get-MsolUser -UserPrincipalName メールアドレス).Licenses.AccountSkuId

Set-MsolUserLicense

ユーザのライセンス状況を変更します。

これを実行すると即、指定したユーザのライセンス状況が変わるのでいろいろ試してみるときはテストアカウントなど用意してテストアカウント相手に試してみましょう。 以下のコマンドを実行すると Get-MsolAccountSku | Select AccountName,SKUPartNumber で調べたライセンスをアプリがすべて有効な状態で追加します。

Set-MsolUserLicense -UserPrincipalName  メールアドレス -AddLicenses "AccountName:SKUPartNumber"

アプリを一部無効にしてライセンスを追加するにはライセンスオプションを指定します。ライセンスオプションは次のNew-MsolLicenseOptionsで説明します

Set-MsolUserLicense -UserPrincipalName  メールアドレス -LicenseOptions ライセンスオプション

New-MsolLicenseOptions

Set-MsolUserLicenseで何のライセンスをどのアプリが無効の状態で割り当てるか、を指定します。

New-MsolLicenseOptions -AccountSkuId "AccountName" -DisabledPlans "ServicePlan"

例えばOffice365 E3のライセンスを Microsoft Formsを無効にした状態で追加するなら

$LicenseOption = New-MsolLicenseOptions -AccountSkuId "ENTERPRISEPACK" -DisabledPlans "FORMS_PLAN_E3"
Set-MsolUserLicense -UserPrincipalName  メールアドレス -LicenseOptions $LicenseOption

とします。DisabledPlansをスクリプトで実行する場合複数種類指定するときには配列にしないとだめそうでした。