Microsoft 365 PowerShell でのライセンス付与方法が変わります

前回お伝えした PowerShell でのライセンス付与方法の変更ですが、まだサインインのところまでとなっているため、引き続き付与方法を見ていきたいと思います。

前回までに Azure アプリケーションの ID とテナント ID 、証明書の Thumbprint でサインインできるところまで見てきました。

今回はその続きとなります。

まずは PowerShell を起動し、以下コマンドレットで接続します。

Connect-MgGraph -ClientID <ID> -TenantId <ID> -CertificateThumbprint <ThumbPrint>

f:id:mohessu:20210829182256p:plain

次に接続したテナントに用意されたライセンスを見ていきましょう。
ライセンスの確認は以下のコマンドレットです。

Get-MgSubscribedSku | Select -Property Id, SkuId, SkuPartNumber, ServicePlans, ConsumedUnits -ExpandProperty PrepaidUnits | Format-List

f:id:mohessu:20210830000819p:plain

このコマンドでは Id にテナント ID _ SKUID の形でテナント固有の ID と SkuPartNumber にライセンス名、 ServicePlans にライセンスに含まれる機能、 ConsumeUnits に利用アカウント数、 Enabled に購入アカウント数が記されています。

特定の SKU を変数に入れたい場合は以下のように Id を知っておく必要があります。

$SKU = Get-MgSubscribedSku -SubscribedSkuId <Id>

前回 Organization.Read.All を付与しているため SKU の情報を見ることができるようになっています。利用したいコマンドレットがどう対応しているか知りたい場合は以下の docs を参照するとわかるかと思います。(権限の種類が多いので調べるのは大変ですね、、、)

https://docs.microsoft.com/en-us/graph/permissions-reference?WT.mc_id=M365-MVP-5002496#organization-permissions

f:id:mohessu:20210830001649p:plain

 

この方法であれば自身が持っている SKU の情報が入手できますが、持っていないものは一覧に出てきません。その時に SKU が知りたい場合は SKU の一覧が以下にあるので、覚えておくとよいでしょう。

https://docs.microsoft.com/en-us/azure/active-directory/enterprise-users/licensing-service-plan-reference?WT.mc_id=M365-MVP-5002496

あとはライセンスをユーザーに付与するだけですが、以下のような形で適用していく感じです。

$SKU = Get-MgSubscribedSku -SubscribedSkuId <Id>
Set-MgUserLicense -UserId < ユーザー UPN > -AddLicenses @{SkuId=$SKU.SkuId} -RemoveLicenses @()

削除するライセンスが無くても RemoveLicenses も必要なので忘れないようにしましょう。

f:id:mohessu:20210830002421p:plain

SkuId を直接指定する場合は以下の形でも問題ありません。この SkuId は Office365 E3 のものとなっています。

Set-MgUserLicense -UserId < ユーザー UPN > -AddLicenses @{SkuId='6fd2c87f-b296-42f0-b197-1e91e994b900'} -RemoveLicenses @()

ライセンスを追加する場合は配列なのですが、削除の場合は単一の SkuId を書くだけでよいみたいです。

以下のコマンドレットでライセンスの削除が行えました。

Set-MgUserLicense -UserId < ユーザー UPN > -AddLicenses @() -RemoveLicenses '6fd2c87f-b296-42f0-b197-1e91e994b900'

もちろん以下の形式でも削除が行えます。

Set-MgUserLicense -UserId < ユーザー UPN > -AddLicenses @() -RemoveLicenses $SKU.SkuId 

最後に SKU 内の一部機能を無効にしておきたい場合の表記です。
以下は Yammer (7547a3fe-08ee-4ccb-b430-5077c5041653) を無効化したコマンドレットです。無効化したい機能の ID は先ほどの  SKU の一覧を確認してみましょう。

$SkuSet = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense
$SkuSet.SkuId = '6fd2c87f-b296-42f0-b197-1e91e994b900'
$disable = @("7547a3fe-08ee-4ccb-b430-5077c5041653")
$SkuSet.DisabledPlans = $disable

Set-MgUserLicense -UserId < ユーザー UPN > -AddLicenses $SkuSet -RemoveLicenses @()

やりたいことは変わらないのですが、 Graph API となることで Msol SDK を使っていた頃よりも難しい感じがしますね。

2022 年 6 月には Msol が使えなくなってしまうので、今のうちのこの方法に置き換えていくのが良いかもしれません。

音楽:かぶとがに 古代の魚