Microsoft Graph Powershell Moduleを使用したライセンス付与

MSOnline PowershellモジュールのSet-MsolUserLicenseコマンドレットが非推奨になった。

使用することは未だ可能だが、スクリプトなどで連続処理を行なうと、3~4件ぐらい処理した後に、下記のエラーが発生して、次の処理を行えるまでにかなりの時間(分のオーダー)が掛かり実用的ではない。

You have exceeded the maximum number of allowable transactions. Please try again later

仕方が無いので、Microsoft Graph APIを使用した方法を試してみた。

ただ、面倒なのはライセンスを追加するにしろ削除するにしろ、Microsoft Graph APIと同じ形で、追加,削除双方のパラメータが必須なところ。

一々、手で打ち込むのは大変なので、下記のようなfunctionを作成してみた。

# MS Graphを使用してライセンスの付与
# skunameはEXCHANGESTANDARDやENTERPRISEPACK等
function global:AddLicense($user,$skuname) {
	# 追加するサブスクリプションライセンスのSkuId(GUID)を取得
	$local:sku = get-mgsubscribedsku -all | where-object {$_.SkuPartNumber -eq $skuname}
	$lic = @(
		@{
			SkuId = $sku.SkuId
			DisabledPlans = @()
		}
	)
	# UserIDを取得
	$local:uid = get-mguser -userid $user
	# ライセンス付与(-RemoveLicensesパラメータも必須-空のリストを渡す)
	set-mguserlicense -userid $uid.Id -addlicenses $lic -removelicenses @()
}
# MS Graphを使用してライセンス削除
# skunameはEXCHANGESTANDARDやENTERPRISEPACK等
function global:RemoveLicense($user,$skuname) {
	# 削除するサブスクリプションライセンスのSkuId(GUID)を取得
	$local:sku = get-mgsubscribedsku -all | where-object {$_.SkuPartNumber -eq $skuname}
	# UserIDを取得
	$local:uid = get-mguser -userid $user
	# ライセンス削除(-AddLicensesパラメータも必須-空のリストを渡す)
	set-mguserlicense -userid $uid.Id -AddLicenses @() -RemoveLicenses @($sku.SkuId)
}

ちなみに、Microsoft Graph Powershell Moduleのコマンドレットを使用する前には、Connect-MgGraphコマンドを実行しておく必要がある。

Connect-MgGraphコマンドには、-Scopesパラメータで、User.Read.All,User.ReadWrite.All,Directory.Read.All,Directory.ReadWrite.All等、コマンド実行に必要な権限を指定する必要がある。

実際に試してみて、単体では問題無く処理ができた。また、連続処理も(同じアカウントにだが)追加,削除をfor文で10回繰り返してもエラーが出なかったので、多分、問題は無いと思う。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: Microsoft Graph, PowerShell, 保守・運用, 技術系 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください