ヘッダー画像

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とパスワードを入力します。環境によってはアカウント選択するだけの場合もあります。

毎回ログイン情報の入力を求められるとタスク実行ができません。タスク実行のやり方は今後の記事で記載予定です。

ログイン画面

アクセス許可の承諾画面で[承諾]をクリックします。

OAuth承諾画面

毎回SkuIdが何だったかわからなくなるので代表的なものだけ一覧に記載します。記載のないライセンスプランについてはメーカーサイトをご確認ください。

ライセンスプランSkuId
Microsoft365 Business BasicSMB_BUSINESS_ESSENTIALS
Microsoft365 Business StandardO365_BUSINESS_PREMIUM
Microsoft365 Business PremiumSPB
Microsoft365 Apps for BusinessSMB_BUSINESS
Office365 Enterprise E1STANDARDPACK
Office365 Enterprise E3ENTERPRISEPACK
Office365 Enterprise E5ENTERPRISEPREMIUM
Microsoft365 Apps for EnterpriseOFFICESUBSCRIPTION
Microsoft365 Enterprise E3SPE_E3
Microsoft365 Enterprise E5SPE_E5
ENTERPRISE MOBILITY + SECURITY E3EMS
ENTERPRISE MOBILITY + SECURITY E5EMSPREMIUM
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 = $EmsSku.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のコマンドレットでライセンス適用されているユーザ様は置き換えが必要になります。

セキュリティ的に向上するとはいえ、この手のスクリプト当時作成した担当者が退職してたりしてよくわからず使ってたりする場合もあるのではと思います。少しでもスクリプト修正の一助になりましたら幸いです。

それではまた次の記事で