👶

Microsoft 365検証アカウントをさくっと作成してライセンスを割り当てる(Microsoft Graph)

2022/12/11に公開

はじめに

Microsoft 365 E5開発者ライセンス利用時、検証アカウントを作成してライセンスを割り当てることはよくあると思います。
Microsoft Graph PowerShell SDKを使ってアカウント作成からライセンス割り当てまでをさくっと行います。

事前準備

Microsoft Graph PowerShell SDKを事前にインストールします。

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
Install-Module Microsoft.Graph

さくっと作成

UserPrincipalName、Password、SkuIdは必要に応じて値を設定してください。
今回はE5開発者ライセンスとMDEトライアルライセンスを割り当てます。

Import-Module Microsoft.Graph
# Microsoft Graphへ接続
Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All"

# ユーザー名だけ使いまわしたい
$UserPrincipalName = "anko@contoso.com"

# アカウント作成用のパラメーターを作成
$CreateUserParam = @{
	# ライセンス割り当て用
	UsageLocation = "JP"
	
	# 必須の値
	AccountEnabled = $true
	DisplayName = "アンバタートースト"
	UserPrincipalName = $UserPrincipalName
	MailNickname = $UserPrincipalName.Substring(0,$UserPrincipalName.IndexOf("@"))
	PasswordProfile = @{
		Password = "xxxxxxxxxxxxxxxx"
		# 次回ログイン時にパスワードを変更するか
		forceChangePasswordNextSignIn = $false
	}
}

# アカウント作成
New-MgUser @CreateUserParam

# ライセンス割り当て用のパラメーターを作成
$AddLicenses = @(
	# E5開発者ライセンス
	@{SkuId = "c42b9cae-ea4f-4ab7-9717-81576235ccac"}
	# MDEトライアルライセンス
	@{SkuId = "111046dd-295b-4d6d-9724-d52ac90bd1f2"}
)

# ライセンス割り当て
Set-MgUserLicense -UserId $UserPrincipalName -AddLicenses $AddLicenses -RemoveLicenses @()

# 実行結果の確認
Write-Host "アカウントを作成しました:$($UserPrincipalName)" -ForegroundColor Green
Get-MgUser -UserId $UserPrincipalName -Property assignedLicenses | Select-Object  -ExpandProperty  assignedLicenses

もう少し細かく作成

ユーザーの任意属性やライセンスに含まれる一部のサービスを無効化して作成してみます。

# Microsoft Graphへ接続
Connect-MgGraph -Scopes "Organization.Read.All","User.ReadWrite.All"

# ユーザー名だけ使いまわしたい
$UserPrincipalName = "anko2@contoso.com"

# アカウント作成用のパラメーターを作成
$CreateUserParam = @{
	# ライセンス割り当て用
	UsageLocation = "JP"
	
	# 必須の値
	AccountEnabled = $true
	DisplayName = "アンバタートースト"
	UserPrincipalName = $UserPrincipalName
	MailNickname = $UserPrincipalName.Substring(0,$UserPrincipalName.IndexOf("@"))
	PasswordProfile = @{
		Password = "xxxxxxxxxxxxxxxxxx"
		# 次回ログイン時にパスワードを変更するか
		forceChangePasswordNextSignIn = $false
	}
	
	# 任意の値
	GivenName = "あんバター"
	Surname = "トースト"
	CompanyName = "甘味処"
	Department = "営業部"	
}

# アカウント作成
New-MgUser @CreateUserParam

# ライセンス割り当て用のパラメーターを作成
$E5DEVELOPERSku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq "DEVELOPERPACK_E5"
$E5DEVELOPERdisabledPlans = $E5DEVELOPERSku.ServicePlans | Where ServicePlanName -in ("STREAM_O365_E5", "SWAY") | Select -ExpandProperty ServicePlanId
$MDESku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq "WIN_DEF_ATP"
$AddLicenses = @(
	@{SkuId = $E5DEVELOPERSku.SkuId; DisabledPlans = $E5DEVELOPERdisabledPlans}
	@{SkuId = $MDESku.SkuId}
)

# ライセンス割り当て
Set-MgUserLicense -UserId $UserPrincipalName -AddLicenses $AddLicenses -RemoveLicenses @()

# 実行結果の確認
Write-Host "アカウントを作成しました:$($UserPrincipalName)" -ForegroundColor Green
Get-MgUser -UserId $UserPrincipalName -Property assignedLicenses | Select-Object -Property UserPrincipalName  -ExpandProperty assignedLicenses

おわりに

New-MgUserでassignedLicensesとproxyAddresses設定できないかなーと思ったらread-onlyでした。。。なんでオプションにあるんだ。。。

New-MgUser : Property 'assignedLicenses' is read-only and cannot be set
New-MgUser : Property 'proxyAddresses' is read-only and cannot be set.

参考

https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users/new-mguser?view=graph-powershell-1.0
https://learn.microsoft.com/ja-jp/graph/api/resources/passwordprofile?view=graph-rest-1.0
https://learn.microsoft.com/en-us/powershell/module/microsoft.graph.users.actions/set-mguserlicense?view=graph-powershell-1.0
https://jpazureid.github.io/blog/azure-active-directory/operating-license-with-microsoft-graph/

Discussion