【Microsoft 365】Microsoft 365 ユーザーアカウントを PowerShell で作成する

## 準備

### Microsoft OnlineService モジュールをインストールする

以下のコマンドでモジュールをインストール、または更新してください。

```powershell
# Microsoft OnlineService のインストールと更新
if((Get-Module MSOnline -ListAvailable | measure).Count -eq 0) {
    Install-Module MSOnline -Force
} else {
    Update-Module MSOnline
}
Get-Command -Module MSOnline | select Name, Version
```

## ユーザーアカウントの新規作成

### Microsoft Azure Active Directory に接続する

```powershell
$Credential = Get-Credential
Connect-MsolService -Credential $Credential
```

### 有効ライセンスの取得

ユーザーに付与するライセンスの ID を取得しておきます。{テナント名}:{ライセンスの種類}

```powershell
$License = (Get-MsolAccountSku).AccountSkuId
```

### ロールの確認

ユーザを追加する権限グループの情報を取得しておきます。

```powershell
Get-MsolRole | Sort Name | Select Name, Description
```

### ユーザーを作成する

CSV ファイルのデータを元にユーザーを作成します。以下のようなデータのファイルを用意します。

###### TestUsers.csv

| UserPrincipalName                      | Password | LastName | FirstName | DisplayName | License                 | Title          | Department | Office | PhoneNumber  | MobilePhone   | Fax          | PostalCode | State  | City     | StreetAddress | Country | UsageLocation | RoleName                 |
| -------------------------------------- | -------- | -------- | --------- | ----------- | ----------------------- | -------------- | ---------- | ------ | ------------ | ------------- | ------------ | ---------- | ------ | -------- | ------------- | ------- | ------------- | ------------------------ |
| testUser001@{テナント}.onmicrosoft.com | ●●●●●    | テスト   | 001       | テスト001   | {テナント}:{ライセンス} | テストユーザー | 〇〇部     | 本社   | 03-1234-5678 | 000-0000-0000 | 03-9876-5432 | 101-0022   | 東京都 | 千代田区 | 3             | 日本    | JP            | SharePoint Administrator |
| testUser002@{テナント}.onmicrosoft.com | ●●●●●    | テスト   | 002       | テスト002   | {テナント}:{ライセンス} | テストユーザー | 〇〇部     | 本社   | 03-1234-5678 | 000-0000-0000 | 03-9876-5432 | 101-0022   | 東京都 | 千代田区 | 3             | 日本    | JP            | SharePoint Administrator |
| testUser003@{テナント}.onmicrosoft.com | ●●●●●    | テスト   | 003       | テスト003   | {テナント}:{ライセンス} | テストユーザー | 〇〇部     | 本社   | 03-1234-5678 | 000-0000-0000 | 03-9876-5432 | 101-0022   | 東京都 | 千代田区 | 3             | 日本    | JP            | SharePoint Administrator |

以下のコマンドを実行します。

```powershell
ipcsv '.\TestUsers.csv' -Encoding Default | % {
    $UserPrincipalName = $_.UserPrincipalName	# ユーザー名 ※必須
    $Password = $_.Password						# パスワード
    $LastName = $_.LastName						# 姓
    $FirstName = $_.FirstName					# 名
    $DisplayName = $_.DisplayName				# 表示名 ※必須
    $LicenseAssignment = $_.License				# ライセンス付与
    $Title = $_.Title							# 役職
    $Department = $_.Department					# 部署
    $Office = $_.Office                         # 事務所
    $PhoneNumber = $_.PhoneNumber				# 電話番号
    $MobilePhone = $_.MobilePhone				# 携帯電話番号
    $FAX = $_.FAX								# FAX番号
    $PostalCode = $_.PostalCode					# 郵便番号
    $State = $_.State							# 都道府県
    $City = $_.City								# 市区町村
    $StreetAddress = $_.StreetAddress			# 番地
    $Country = $_.Country						# 国
    $UsageLocation = $_.UsageLocation			# 利用地域 日本であれば [JP] ※必須
    $StrongPasswordRequired = $false			# パスワードの複雑性の有効化/無効化
    $ForceChangePassword = $false				# 初回ログイン時にパスワード変更を要求するかどうか
    $PasswordNeverExpires = $true				# パスワードの有効期限を無効化するかどうか

    New-MsolUser `
        -UserPrincipalName $UserPrincipalName `
        -Password $Password `
        -LastName $LastName `
        -FirstName $FirstName `
        -DisplayName $DisplayName `
        -LicenseAssignment $LicenseAssignment `
        -Title $Title `
        -Department $Department `
        -Office $Office `
        -PhoneNumber $PhoneNumber `
        -MobilePhone $MobilePhone `
        -FAX $FAX `
        -PostalCode $PostalCode `
        -State $State `
        -City $City `
        -StreetAddress $StreetAddress `
        -Country $Country `
        -UsageLocation $UsageLocation `
        -StrongPasswordRequired $StrongPasswordRequired `
        -ForceChangePassword $ForceChangePassword `
        -PasswordNeverExpires $PasswordNeverExpires `

    $RoleName = $_.RoleName
    if (![string]::IsNullOrEmpty($RoleName)) {
        Add-MsolRoleMember -RoleMemberEmailAddress $UserPrincipalName -RoleName $RoleName
    }
}
```

# 参考サイト

- [New-MsolUser (MSOnline) | Microsoft Docs](https://docs.microsoft.com/en-us/powershell/module/msonline/new-msoluser?view=azureadps-1.0)
- [PowerShell Microsoft 365ユーザー アカウントを作成する - Microsoft 365 Enterprise | Microsoft Docs](https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/create-user-accounts-with-microsoft-365-powershell?view=o365-worldwide)
- [(Office365)Powershellにてユーザーを一括登録する方法を検証してみた　〜New-MsolUser〜 : ITインフラに悩まされてる日常 (mitsushima.work)](https://mitsushima.work/archives/20294014.html)