こんばんは!
ブログを書くネタに困りしばらく停止してましたが、昔記載した以下の記事を修正しないといけなくなったため改めて記載します。
思えば1年以上前、一番最初に書いたブログでした!1年以上続いたことに自分でびっくり!笑
上記記事ではMicrosoft365のユーザーのライセンス割り当てをPowershellで実施する方法を紹介していました。
その際、MSOnlineというPowerShellモジュールをインストールして実行していたのですが、MSOnlineで利用されるADAL(Azure Active Directory Authentication Library)をMSAL(Microsoft Authentication Library)とMicrosoft Graph APIを利用するように変更してくださいという案内がでました!
↓の記事ですね!
記事内では
2022 年 6 月 30 日をもちまして Active Directory Auth Library (ADAL) および Azure Active Directory Graph のサポートを終了するため、MSAL および Microsoft Graph を使用するよう、アプリのアップデートを推奨します。また、まだ ADAL を使用しているアプリを簡単に見つけることができるようにいたしました。
と書かれているので、記事をアップデートします。
なおこれによって、PowerShellのAzureADモジュールおよびMSOnlineのコマンドレットに影響が発生します。
実施したい内容は上記記事と同じで以下を目指します。
- PowerShellを利用してMicrosoft365ユーザーのライセンス割り当てを実施
- 特定のアプリケーションはオフ
- モジュールのインストール方法
Powershellを管理者として起動して
「Install-Module Microsoft.Graph」を実行
表示される選択肢はYとAで実行
サポートされる条件は以下
- PowerShell5.1以降
- .NET Framework 4.7.2以降
細かくはここを確認
Microsoft Graph PowerShell SDK をインストールする - Microsoft Graph | Microsoft Docs
- Microsoft Graphでのアクセス
Powershellにて「Connect-Graph -Scopes Directory.ReadWrite.All」
※ちなみにScopesにはDirectory.ReadWrite.Allと結構大きな権限を付けてつないでいます。
呼び出したいものによって必要な委任の権限が違うので、確認されたい方はリファレンスを確認してください。
Microsoft Graph の概要 - Microsoft Graph | Microsoft Docs
こんな感じで書かれると思うので、利用するものをピックアップください。
ちなみに今回のライセンス割り当てに必要なアクセス権限は以下のどちらかです。
- User.ReadWrite.All
- Directory.ReadWrite.All
接続に利用するアカウントを選択もしくは入力
組織の代理として同意するにチェックをいれ承諾をクリック
接続されたことが確認できます。
試しに「Get-MgUser」を実行してみるとユーザーリストが取得できることがわかります。※塗りつぶし過ぎてよくわからないですね・・・笑
- ライセンス割り当ての準備
ライセンス割り当てをPowershellで実行するにあたり以下の準備を実施します。
- 割り当てるライセンスのID確認
- ライセンスをオフにするアプリケーションのID確認
1.割り当てるライセンスのID確認
Micrsoft Graphに接続されたPowerShellコンソールで「Get-MgSubscribedSku | fl」を実行
今回はMicrosoft365 E5 DEVELOPERを付与しようと思うので上記の赤丸のSkuIdとIdを確認します。
2.ライセンスをオフにするアプリケーションのID確認
Micrsoft Graphに接続されたPowerShellコンソールで以下を実行
(Get-MgSubscribedSku -SubscribedSkuId 7bf3acff-2346-4dfa-9c69-6f23129f36ba_c42b9cae-ea4f-4ab7-9717-81576235ccac | Select-Object serviceplans).serviceplans
-SubscribedSkuIdの後ろには対象のライセンスのIdを入力します。
SKUIDじゃないよ!注意!
これでライセンスに含まれるServicePlanNameとIDが確認できます。
今回は赤線で記載したTeamsとFormsをオフにしてみます。
対象のアプリケーションのIDを控えます。
- いざライセンス付与
初回ライセンス付与の場合、前回の記事と同様に利用ロケーションを設定しないとライセンス付与がエラーになります。
今回pstest@xxx.mlというユーザーにライセンス付与するので、まずは利用ロケーションを設定します。※日本の想定で記載しています。
下記を実行
「Update-MgUser -UserId pstest@xxx.ml -UsageLocation "JP"」
次にライセンス情報を保有するオブジェクトを作成します。
ここで、先ほど調査したSkuIdとServicePlanIdを利用します。
下記を実行
$AddLicense = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "c42b9cae-ea4f-4ab7-9717-81576235ccac"; disabledPlans =@("57ff2da0-773e-42df-b2af-ffb7a2317929","e212cbc7-0961-4c40-9825-01117710dcb1")}
SkuIdとdisabledPlans内の文字列は先ほど調査した値に合わせて変更してください。
ちなみにアプリケーションは全部オンでいいよって場合はこっち
$AddLicense = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense -Property @{SkuId = "c42b9cae-ea4f-4ab7-9717-81576235ccac"}
以下を実行
Set-MgUserLicense -UserId pstest@msdive.ml -AddLicenses @($AddLicense) -RemoveLicenses @()
管理画面から参照してみると
ちゃんと設定されていることが確認できました!!
- おまけ
前回と同様に単一ユーザーへの設定のため複数ユーザーへの適用処理についても記載します。
内容はほぼ前回と一緒なので細かい解説は省きます。
Connect-Graph -Scopes Directory.ReadWrite.All $File = "C:\temp\List.csv" $UserLists = Import-Csv -Path $File $AddLicense = New-Object -TypeName Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense ` -Property @{SkuId = "c42b9cae-ea4f-4ab7-9717-81576235ccac"; disabledPlans =@("57ff2da0-773e-42df-b2af-ffb7a2317929","e212cbc7-0961-4c40-9825-01117710dcb1")} foreach($User in $UserLists){ Update-MgUser -UserId $User.User -UsageLocation "JP" Set-MgUserLicense -UserId $User.User -AddLicenses @($AddLicense) -RemoveLicenses @() } Disconnect-Graph
相変わらずForeachを利用し続けるくぼたなのでした!笑
- 最後に!
Twitterでも情報発信したいと思いますので、興味があったらフォローしてください!