Migration MSOnline to Microsoft Graph PowerShell for license and serviceplan management
2022年8月26日の Microsoft Azure ActiveDirectory Graph API サポート終了にともなう、MSOnline PowerShell のライセンス管理系コマンドレットサポート終了の対策についてのまとめです。
※コードを整形済みテキストで書き直すかも
情報(日本語版)収集
(オリジナルのUSの情報は、影響範囲を断定した書き方になっていないのでちょっと困惑しました)
サポート終了となるPowerShellコマンド
- MSOnline PowerShell モジュールの SetMsolUserLicense
- MSOnline PowerShell モジュールの New-MsolUser
-LicenseAssignment -LicenseOptions オプションを使用している場合
- Azure AD PowerShell モジュールの Ser-AzureADUserLicense
このほかに、Azure AD Graph APIの assignLicense コマンドも提示されています。
これはPowerShellコマンドレットではないので、いったん置いておきます。
我々がMigrationすべきツール探し
対象の ツールで、廃止されるコマンドレットが使われているか調べます。
こんなこともあろうかと、とは思っていませんでしたが、あまり実装方法をばらつかせてしまうと収集がつかなくなると考えて、我々のチームでは
Set-MsolUserLicense だけを使うようにしていました。
全てのライセンス管理オペレーションは、こんな感じのPowerShelスクリプトで実装してあります。
Set-MsolUserLicense -UserPrincipalName $UPN `
-addLicense <ライセンス名>
-LicenseOptions <ライセンスオプションオブジェクト> `
-RemoveLicense <ライセンス名>
修正でやること
コマンドレットの置き換え
Connect-MSOLService -> Connect-MGGraph
New-MsolLicenseOptions -> New-Object -TypeName 'Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense'
Set-MsolUserLicense -> Set-MgUserLicense
修正の注意点・所感
- テナントへの接続は Connect-MgGraph コマンドレットを使いますが、-Scopes の指定が必須。
ライセンス付与・削除をする場合、スコープは "Organization.Read.All","User.ReadWrite.All" です。- このスコープは、参考にしたサイトのマネをしていますが、どうやってこのスコープを見つけ出すのかが理解できていません。
このあたりが、今回の対応の最大の闇かなと思います。
ここを解き明かさずに実装してしまうと、将来なにか仕様変更があったときに対応出来る人がいないかもしれません。
- このスコープは、参考にしたサイトのマネをしていますが、どうやってこのスコープを見つけ出すのかが理解できていません。
- ライセンスの追加・削除は、-AddLicense/-RemoveLicense オプションを使うところは同じ。
ただし、以下の差異有り- ライセンスは、ライセンス名 ではなく ライセンスSKUID で指定する。
- Add、Remove どちらかしかしない場合でも、必ずAdd/Remove両方のオプション指定が必須。ダミーのオプションでは、パラメータを $null にすればいいみたい。
- 特定のアプリを利用制限する場合、DisabledPlans にオプトアウトアプリをセットする考え方はMSOnlineと同じ。ただしオプトアウトするアプリは、アプリ名ではなくIDで指定する様に変わっている。
#Sample: add M365(Business Premium) license and disabled stream.
Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All"
$UserID = 'user@tenantdomain'
$ObjectName = 'Microsoft.Graph.PowerShell.Models.MicrosoftGraphAssignedLicense'
$LicenseSkuID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
$LicenseOption = New-Object -TypeName $ObjectName -Property @{SkuId = $LicenseSkuID ;DisabledPlans = @('743dd19e-1ce3-4c62-a3ad-49ba8f63a2f6') }
Set-MgUserLicense -UserId $UserID -AddLicenses @($LicenseOption) -RemoveLicenses @()