Microsoft Graph PowerShell SDK を使用したライセンス管理
目次
はじめに
Microsoft365を利用するにあたり、一部の会社様ではライセンス適用をPowershellで実施されていることもあると思います。今更遅いよ感はありますが、Microsoft Online ServiceおよびAzure AD Graphコマンドレットが廃止になる案内が出ているため対応方法を検討していきます。
廃止までのスケジュール
そもそもとしてMicrosoft Online ServiceとAzure ADのPowershellコマンドレットは2022年12月末以降廃止されると案内が出ています。
必要な対応
現在Azure AD コマンドやMicrosoft Onlineコマンドを使ってスクリプト運用されている場合は、Microsoft Graph Powershellへの置き換えが必要になります。各コマンドに対するGraphコマンドはここで公開されています。
Microsoft Graph Powershellの制限
Graph Powershellには実装されていない機能が存在してます。2022年8月6日現在以下の制限があるようです。
- Get-AzureADUser、Get-AzureADGroup コマンドの -SearchString に相当するものはまだありません。代わりに -Filter を使用してください。たとえば、Get-MgUser -Filter “DisplayName eq ‘Lee Gu'”表示名が指定された文字列と等しいユーザーを返します。
- Azure AD コマンドの検索はまだ機能しません。
- ネストされたパラメーターを渡すには、ハッシュ テーブルを使用する必要があります。ネストされたパラメーターのサンプルを次に示します。
- プロのヒント: Microsoft Graph PowerShell ConsistencyLevel パラメーターを使用します。$count を実行できます。これは、読み取り専用のシナリオで使用するのが最適であり、変更を行うときはより注意する必要があります。ConsistencyLevel パラメーターの詳細については、「高度なクエリ パラメーター」を参照してください。
Microsoft Graph Powershellモジュールのインストール
過去の記事でも紹介していますが、対象のコマンドレットを利用する場合はまずモジュールのインストールする必要があります。以下のコマンドを実行してモジュールのインストールを実行しましょう。
Install-Module Microsoft.Graph
Microsoft Graph Powershellの利用
以下のコマンドを実行してMicrosoft Graphに接続します。特定のスコープに対して接続する必要がありますので、この例だとユーザに関する情報の取得と変更が可能になります。セキュリティ的にはこの方が良いですね。
Connect-MgGraph -Scopes "User.ReadWrite.All"
利用するコマンドで利用できるスコープのリストは以下のコマンドで確認できます。
Find-MgGraphCommand -command <利用するコマンド> | Select -First 1 -ExpandProperty Permissions
ConnectするとMicrosoft365のログイン画面が表示されますので、IDとパスワードを入力します。環境によってはアカウント選択するだけの場合もあります。
毎回ログイン情報の入力を求められるとタスク実行ができません。タスク実行のやり方は今後の記事で記載予定です。
アクセス許可の承諾画面で[承諾]をクリックします。
毎回SkuIdが何だったかわからなくなるので代表的なものだけ一覧に記載します。記載のないライセンスプランについてはメーカーサイトをご確認ください。
ライセンスプラン | SkuId |
---|---|
Microsoft365 Business Basic | SMB_BUSINESS_ESSENTIALS |
Microsoft365 Business Standard | O365_BUSINESS_PREMIUM |
Microsoft365 Business Premium | SPB |
Microsoft365 Apps for Business | SMB_BUSINESS |
Office365 Enterprise E1 | STANDARDPACK |
Office365 Enterprise E3 | ENTERPRISEPACK |
Office365 Enterprise E5 | ENTERPRISEPREMIUM |
Microsoft365 Apps for Enterprise | OFFICESUBSCRIPTION |
Microsoft365 Enterprise E3 | SPE_E3 |
Microsoft365 Enterprise E5 | SPE_E5 |
ENTERPRISE MOBILITY + SECURITY E3 | EMS |
ENTERPRISE MOBILITY + SECURITY E5 | EMSPREMIUM |
Microsoft Defender for Office365 (プラン1) | ATP_ENTERPRISE_GOV |
Microsoft Defender for Office365 (プラン2) | THREAT_INTELLIGENCE_GOV |
ライセンス適用するスクリプトは以下の形で実行します。
Connect-Graph -Scopes "User.ReadWrite.All","Organization.Read.All" #この例ではE3プラン選択 $sku = Get-MgSubscribedSku -All | ?{ $_.SkuPartNumber -eq "SPE_E3"} #無効化するサービス $newDisabledPlans = $sku.ServicePlans | Where ServicePlanName -in ("YAMMER_ENTERPRISE") | Select -ExpandProperty ServicePlanId #適用するサービスリストの作成 $addLicenses = @( @{SkuId = $sku.SkuId DisabledPlans = $newDisabledPlans} ) #ユーザに対するライセンス適用 Set-MgUserLicense -UserId <メールアドレス> -AddLicenses $addLicenses -RemoveLicenses @()
各ライセンスに含まれるサービスリストを確認する場合は以下のコマンドで確認が可能です。無効化するサービスのID確認にご利用ください。この例ではMicrosoft365 E3のサービス一覧を確認していますが適宜変更してください。
Connect-Graph -Scopes Organization.Read.All (Get-MgSubscribedSku -All | ?{ $_.SkuPartNumber -eq "SPE_E3"}).ServicePlans
まとめ
今回の記事では、Microsoft Graph Powershellを使ったライセンス適用方法についてご紹介しました。Microsoft Online ServiceやAzure AD Graphのコマンドレットでライセンス適用されているユーザ様は置き換えが必要になります。
セキュリティ的に向上するとはいえ、この手のスクリプト当時作成した担当者が退職してたりしてよくわからず使ってたりする場合もあるのではと思います。少しでもスクリプト修正の一助になりましたら幸いです。
それではまた次の記事で