くらっちのクラウド日記

仕事や勉強で得た Microsoft 365 関連の技術知識を投稿していくブログです。

【PowerShell】CSVファイルを読み込んでユーザー作成&ライセンス付与する

はじめに

こんにちは、くらっちです。
今回はPowerShell で「ユーザーを新規作成&ライセンスも付与」してみよう!
ということでサンプルコードを作りました。
初心者向けの備忘録的な記事となります。

やろうとしていること

ユーザー情報が記載されたcsvファイルを読み込んでユーザーを一括登録します。
csvファイルには「UserPrincipalName、FirstName、LastName」のみ記載。
パスワードは「p@ss + MMdd」で固定、初期ログイン時に変更必須。
付与するライセンスは「Microsoft Business Basic」で固定。

サンプルコード

下記サンプルコードは、基本そのまま利用できます。
適宜<>の中身は修正してください。
読み込むcsvファイルは「UTF-8」形式にしてください。

#Set-MgUserLicense に必要なアクセス許可
Connect-Graph -Scopes User.ReadWrite.All, Organization.Read.All
#Get-MgUser に必要なアクセス許可
Connect-MgGraph -Scopes User.Read.All

$times = Get-Date -Format "yyyyMMddHHmmdd"
$todays = Get-Date -Format "MMdd"
$csvpath = "<import_filepath>\users.csv"

#csvファイルを読み込んで繰り返し処理
Import-Csv -Path $csvpath | ForEach-Object { 
    #ユーザーを新規作成
    New-MgUser -UserPrincipalName $_.UserPrincipalName -mailNickname "sample" -AccountEnabled -DisplayName "$($_.FirstName) $($_.LastName)" -GivenName $_.LastName -Surname $_.FirstName -UsageLocation "JP" -PasswordProfile @{ "Password"="p@ss$todays"; "forceChangePasswordNextSignIn" = $true
} 

    #新規作成したユーザー情報を取得
    $user = Get-MgUser -All -Filter "UserPrincipalName eq '$($_.UserPrincipalName)'"
    $userid = $user.ID

    #「O365_BUSINESS_ESSENTIALS」の ライセンス情報を取得
    $EmsSku = Get-MgSubscribedSku -All | Where-Object SkuPartNumber -eq 'O365_BUSINESS_ESSENTIALS'
    #ライセンス付与
    Set-MgUserLicense -UserId $userid -AddLicenses @{SkuId = $EmsSku.SkuId} -RemoveLicenses @()
}

このエラーが出た場合どうする?

New-MgUser : 引数 'True' を受け入れる位置指定パラメーターが見つかりません。
$true の記載が不要な場所に $true が入力されている可能性があります。

New-MgUser : Another object with the same value for property userPrincipalName already exists.
登録しようとしたユーザーは既に組織に存在しているようです。
※userPrincipalName の重複あり。

Set-MgUserLicense : Subscription with SKU … does not have any available licenses.
付与しようとしたライセンスに余りがない可能性があります。
ライセンスを追加購入して処理を実行しましょう。

参考

New-MgUser (Microsoft.Graph.Users) | Microsoft Learn
Get-MgUser (Microsoft.Graph.Users) | Microsoft Learn
Get-MgSubscribedSku (Microsoft.Graph.Identity.DirectoryManagement) | Microsoft Learn
Set-MgUserLicense (Microsoft.Graph.Users.Actions) | Microsoft Learn