PowerShell で Microsoft 365 のユーザーを一括登録する
Web 会議の利用が進んでいることもあって、Microsoft 365 を新規導入することになった企業も多いのではないでしょうか。利用者が多いと管理画面から1人1人ユーザーを登録するのは面倒です。管理画面からも CSV ファイルをアップロードしてユーザーを一括登録することができますが、パスワードの設定やライセンスの割り当てができないので、思ったほど省力化することができません。そこで今回は PowerShell を使って、Microsoft 365 のユーザーを一括登録する方法を紹介します。
準備と注意
以下の手順で一括登録するためには、Windows 10 に標準でインストールされている PowerShell を使う必要があります。現状では以前紹介した PowerShell 7(PowerShell Core)ではうまくいかないのでご注意ください。
- IT プロフェッショナル 用 Microsoft Online Services サインイン アシスタント RTWをインストールする
- Windows PowerShell を管理者として実行し、以下のコマンドを実行する
Install-Module MSOnline
コマンドを実行- NuGet プロバイダーをインストールするようにメッセージが表示されたら、「Y」と入力し、ENTER を押す
- PSGallery からモジュールをインストールするようにメッセージが表示されたら、「Y」と入力し、Enter を押す
ここまでで準備は完了です。この先は管理者でなくても問題ありません。
所有しているライセンスを確認する
Windows PowerShell を開き、以下のコマンドを実行します。
Connect-MsolService
Microsoft 365 のログイン画面が表示されるので、Microsoft 365 の管理者のログイン情報を入力します。続いて、以下のコマンドを入力します。
Get-MsolAccountSku
現在保有しているライセンスの情報が表示されるので、AccountSkuId
の値を控えておいてください。
AccountSkuId ActiveUnits WarningUnits ConsumedUnits
------------ ----------- ------------ -------------
example:SMB_BUSINESS_ESSENTIALS 11 0 0
example:SMB_BUSINESS_PREMIUM 1 0 0
ActiveUnits
が保有しているライセンス、ConsumedUnits
が保有しているライセンスのうち、ユーザーに割り当てられているものの数です。
CSV の準備
以下の内容で CSV を作成します。文字コードは UTF-8、改行コードは CRLF で。後でパスを指定することになるので、わかりやすい場所に保存しておきます(C:\temp\user.csv
など)。
UserPrincipalName,DisplayName,FirstName,LastName,Password,UsageLocation,AccountSkuId
t.yamada@example.com,山田 太郎,太郎,山田,Pass1234,JP,example:SMB_BUSINESS_ESSENTIALS
一括登録の実行
いよいよ一括登録の実行です。以下のコマンドを実行します。
Connect-MsolService
# Microsoft 365 のログイン情報を入力
Import-Csv -Path C:\temp\user.csv | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -Password $_.Password -ForceChangePassword $False} | Export-Csv -Path C:\temp\user_result.csv
-ForceChangePassword $False
を付けることで、設定したパスワードをそのまま使うことができます。-ForceChangePassword $True
にすると、初回ログイン時にパスワードの設定を要求されるようになります。
登録する人数が多いと少し時間がかかりますが、じっと待ちましょう。実行結果は C:\temp\user_result.csv
に出力されます。
メールボックスの言語設定を変更する
上記の手順でユーザーの登録とライセンスの割り当ては終わっていますが、日本語環境で使用する場合には、もう少し作業を続けます。登録直後に Outlook を起動すると、[受信トレイ] が [Inbox] と表示されることがあります。これは言語設定が日本語になっていないために起きる現象です。後からユーザーレベルで変更することも可能ですが、まとめて設定してしまいましょう。
$UserCredential = Get-Credential
# Microsoft 365 のログイン情報を入力
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
Import-Csv -Path C:\temp\user.csv | foreach {Set-MailboxRegionalConfiguration -Identity $_.UserPrincipalName -DateFormat "yyyy/MM/dd" -TimeFormat "H:mm" -TimeZone "Tokyo Standard Time" -LocalizeDefaultFolderName:$True -Language "ja-JP"}
こちらのコマンドは PowerShell 7 でも実行可能です。実行時に「スクリプトの実行がシステムで無効になっているため、ファイルを読み込めません。」と表示されたときは、管理者権限で PowerShell を起動し
Set-ExecutionPolicy RemoteSigned
を実行してください。
設定できたかどうかは
Get-Mailbox -Filter "RecipientTypeDetails -eq 'UserMailbox'" | Get-MailboxRegionalConfiguration
で確認できます。
Identity Language DateFormat TimeFormat TimeZone
-------- -------- ---------- ---------- --------
t.yamada ja-JP yyyy/MM/dd H:mm Tokyo Standard Time
のように表示されたら設定できています。
おまけ:予定表のアクセス権限を設定する
デフォルトでは、他のユーザーの予定表は予定がある部分に [予定あり] と表示されるだけで、詳細が確認できません。ユーザーが個別に設定を変更することもできますが、デフォルトで予定の詳細を表示できるようにするには、以下のコマンドを実行します。
Import-Csv -Path C:\temp\user.csv | foreach {Set-MailboxFolderPermission -Identity "$($_.UserPrincipalName):\予定表" -User "Default" -AccessRights Reviewer}
-AccessRights Reviewer
の部分を変更すれば、別の権限を与えることができます。主な権限は以下の通りです。詳細はこちらをご覧ください。
権限名 | 権限の内容 |
---|---|
None | 権限なし |
AvailabilityOnly | 空き時間情報のみ閲覧可(デフォルト) |
LimitedDetails | 空き時間情報、件名、場所を閲覧可 |
Reviewer | すべての予定情報を閲覧可 |
Author | すべての予定情報を閲覧可、予定の作成、予定の編集・削除(自分が作成したもののみ) |
Editor | すべての予定情報を閲覧可、予定の作成、すべての予定の編集・削除 |
Owner | 本人と同じ権限 |
上の手順で言語設定を日本語にしていない場合、$($_.UserPrincipalName):\予定表
の部分を $($_.UserPrincipalName):\Calendar"
に変更してください。
ディスカッション
コメント一覧
まだ、コメントがありません