Micrsoft365のアカウントに新しいライセンスを一括で追加しようとしたところ、私の持っていた情報が古かったのでここで最新版にアップデートしたいと思います。
Microsoft Graph
Microsoft365関係では MSOnline を利用していた記憶がありますが、2024年3月に非推奨になりました。新たに使用するのは Graph PowerShell というコマンドです。
Graph をインストールする
まずは Graph をインストールしましょう。
> Install-Module Microsoft.Graph
> Import-Module -Name Microsoft.Graph.Users
付随するモジュールをインストールするよう求められますので、それもインストールします。では接続してみます。
> Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All","Group.Read.All","GroupMember.Read.All"
Welcome to Microsoft Graph! と表示されたら成功です。
ライセンスを一括追加する
流れ
ライセンスを一括で追加すると言っても管理しているすべてのユーザーに追加したいわけではありません。今回追加したいのは Microsoft365 Business Standard のライセンスを持っているユーザーにのみ追加したいです。ですので、以下のような流れで行います。
1. 所有しているライセンスの一覧を取得する
2. Mirosoft365 Business Standard ユーザーのみを抽出する
3. 上記のユーザー一覧ファイルを生成する
4. 一覧ファイルを読み込みながら新しいライセンスを追加する
この流れを見ると「わざわざファイルを生成する必要はあるのか?」と思われるかもしれません。ごもっともです。実は諸事情があり、一覧ファイルをさらに編集していますが今回はその点は割愛させていただきます。
所有しているライセンスの一覧を取得する
まずはライセンス一覧を取得します。
> Get-MgSubscribedSku | ft Id, SkuId, SkuPartNumber -Wrap
Id SkuId SkuPartNumber
-- ----- -------------
(ここにライセンス一覧が表示される)
大事なのは SkuId です。Microsoft365 Business Standard の SkuId をメモします。あとで追加する新ライセンスの SkuId もメモしておきます。
特定のユーザーのみを抽出する
Mirosoft365 Business Standard ユーザーのみを抽出します。先ほどメモした SkuId を使用します。
> $skuld = "(Microsoft365 Business StandardのSkuId)"
> $path = "C:\Temp\graph_user.csv"
> $users = Get-MgUser -All -Filter "assignedLicenses/any(s:s/skuId eq $skuId)"
> $users | select @{n="ObjectId"; e={$_.Id}}, @{n="UserPrincipalName"; e={$_.UserPrincipalName}}, @{n="DisplayName"; e={$_.DisplayName}} | Export-Csv -NoTypeInformation -Encoding UTF8 -Path $path
これで C:\Temp\graph_user.csv というファイルが生成されました。Microsoft365 Business Standard ライセンスが付与されているユーザーの一覧を取得できました。
新しいライセンスを追加する
続いてcsvファイルに存在するユーザーすべてに新しいライセンスを追加したいと思います。
> $skuld = "(新しく追加するライセンスのSkuId)"
> $License1 = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = $skuld; DisabledPlans = @()}
> Import-Csv C:\Temp\graph_user.csv | ForEach-Object { Set-MgUserLicense -UserId $_.UserPrincipalName -AddLicenses @($License1) -RemoveLicenses @() }
単純にライセンスを付与しています。ライセンスに包含されるサービスプランに関しては特に設定していません。すべて付与されます。もしその点をカスタマイズしたい場合、MicrosoftGraphAssignedLicense のプロパティ DisabledPlans に付与させたくないサービスプランを設定するようです。
メソッド Set-MgUserLicense でライセンスを付与しています。AddLicenses に付与したいライセンスのSkuIdを設定します。あとはcsvファイルをForEachで読み込みますのでユーザーすべてに適用されます。
まとめ
MSOnline のときと流れは一緒でした。ライセンスを付与したいユーザー一覧を抽出し、そのユーザーにForEachでライセンスを当てていきます。
実はGraphを使うのは初めてだったので、初めての記念カキコの思いも含めて記録しました。
コメント