GIGAスクール | Office 365 の運用管理 Tips

#はじめに

文部科学省の [GIGAスクール構想](https://www.mext.go.jp/a_menu/other/index_00001.htm) により、2021年度には多くの学校で Office 365 の利用が開始されます。本記事では、Office 365 をはじめて運用される管理者向けの Tips を紹介します。

#ユーザーの管理

## ユーザー登録

Office 365 へのユーザー登録は、[Microsoft 365 管理センター](https://admin.microsoft.com/) や [Azure Active Directory の管理画面](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview) から一括登録することができますが、1回に登録できるユーザーは**250名まで**となっています。従って、10,000名登録したい場合には、250名 x 40 個の登録用データを作成し、順次登録する必要があります。

一方、PowerShell を使用した一括登録では、1回に登録できるユーザーは**5,000名まで**となっていますので、大人数のユーザーを登録する場合は、PowerShellを使って登録した方が圧倒的に楽です。

### Office 365 を管理するための PowerShell モジュール

Office 365 用の PowerShell モジュールには、

- コマンドレッド名に *AzureAD* が含まれる Graph用 Azure AD PowerShell モジュール
- コマンドレッド名に *Msol* が含まれる Windows PowerShell 用 Microsoft Azure AD モジュール

の2種類があります。現時点では Graph 用 Azure AD PowerShell モジュールは、 Windows PowerShell 用 Microsoft Azure AD モジュールの機能を完全に補完するものでありませんので要件によって両バージョンを使い分ける必要があります。両バージョンの PowerShell モジュールは**同じコンピューターにインストールする**ことができます。

### インストールできるオペレーティングシステム

以下のいずれかの OS がインストールされた端末を用意してください。
なお、用意いただいた端末のOSは、**64bit**バージョンである必要があります。

- Windows 10
- Windows 8.1
- Windows 8
- Windows 7 Service Pack 1 (SP1)
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012 R2
- Windows Server 2012
- Windows Server 2008 R2 SP1

### PowerShell モジュールのインストール

Windows の **[スタート]** を開き、**[Windows PowerShell]** を管理者権限で開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/ee54a14a-8c6d-dece-df64-5e88f5c1ebcc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5ad765d8-304e-c80a-72a3-313901374eb4.png)

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

```PowerShell:PowerShell
Install-Module -Name AzureAD
Install-Module -Name MSOnline
```

### Office 365 への接続

Windows PowerShell 用 Microsoft Azure AD モジュール (MSOnline) を使用して、Office 365 へ接続します。

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

```PowerShell:PowerShell
Connect-MsolService
```

サインインの画面が表示されますので、Office 365 の管理者アカウントでログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/7cdecf16-7505-91d8-1ea5-0314ca5828fe.png)

### ライセンス情報の取得

**Get-MsolAccountSku**コマンドを実行して、利用できる Office 365 のライセンスを確認します。

```PowerShell:PowerShell
Get-MsolAccountSku

AccountSkuId                                 ActiveUnits WarningUnits ConsumedUnits
------------                                 ----------- ------------ -------------
contoso:M365EDU_A3_STUUSEBNFT                50000       0            100
contoso:STANDARDWOFFPACK_STUDENT             2000000     0            226326
contoso:FLOW_FREE                            10000       0            1
contoso:STANDARDWOFFPACK_STUDENT_DEVICE      2656        0            0
contoso:STANDARDWOFFPACK_FACULTY_DEVICE      68          0            0
contoso:TEAMS_EXPLORATORY                    100         0            0
contoso:M365EDU_A3_FACULTY                   4150        0            2
contoso:STANDARDWOFFPACK_FACULTY             1000000     0            13413
contoso:M365_EDU_GIGA_PROMO                  3539        0            0
```

### ユーザー登録用CSVファイルの作成

ユーザー登録用のCSVファイルを作成します。
1行目がラベルで2行目以降に登録するユーザーデータを入力してください。

|UserPrincipalName|DisplayName|Password|FirstName|LastName|JobTitle|City|bisinessPhone|Department|PostalCode|streetAddress|MobilePhone|State|Countory|UsageLocation|AccountSkuId|
|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|taro@contoso.ac.jp|山田 太郎||山田|太郎|Student|マイクロソフト中学校|2014|中1|A|バスケットボール||東京|Japan|JP|contoso:STANDARDWOFFPACK_STUDENT|
|hanako@contoso.ac.jp|佐藤 花子||佐藤|花子|Student|マイクロソフト中学校|2014|中1|A|バレーボール||東京|Japan|JP|contoso:STANDARDWOFFPACK_STUDENT|
#
|ラベル名|必須|説明|
|:--|:--|:--|
|UserPrinipalName|◎|Microsoft 365 サービスへのサインインに使用されるアカウント名|
|DisplayName|◎|Microsoft 365 サービスで使用される表示名|
|Password|×|パスワードを指定しない場合、ランダムなパスワードがユーザー アカウントに割り当てられます|
|FirstName|×|姓|
|LastName|×|名|
|JobTitle|〇|職位(例:Student or Teacher)|
|City|〇|学校名|
|businessPhone|〇|小学校1年時の入学年度(例:2014)|
|Department|×|学年(例:小1, 中2, 高3)|
|PostalCode|×|クラス(A, B, C)|
|streetAddress|×|部活動|
|MobilePhone|×|担当科目(教員の場合)|
|State|×|都道府県|
|Country|×|国名(例:Japan)|
|UsageLocation|◎|"JP"固定|
|AccountSkuId|〇|ライセンス名(Get-MsolAccountSku コマンドで取得したもの)|
◎：必須
〇：必須ではないが、登録しておくと後々役に立つ
×：必須ではない(未登録でも問題ない)

Microsoft Excel を使ってファイルを作成している場合には、ファイル保存時に **[CSV UTF-8(コンマ区切り)(*.csv)]** にして保存すること。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/93eb38c6-9da0-c11b-cde0-903bdb40afa0.png)

### PowerShell によるアカウント一括登録

PowerShellによるアカウント一括登録では一回に登録できるユーザーは5,000名までです。5,000名以上の場合には複数のファイルを用意してください。
以下のコマンドでアカウントの登録を行います。

```PowerShell:PowerShell
Connect-MsolService
Import-Csv -Path <Input CSV File Path and Name> | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId} | Export-Csv -Path <Output CSV File Path and Name> -Encoding UTF8
```
アカウント登録用ファイルにパスワードが記載されていない場合には、アカウント登録結果ファイルにパスワードが記載されます。

毎回コマンドを全部入力するのは面倒なので、以下のスクリプトを addo365user1.ps1 ファイルとして作成することで、簡単にアカウント登録することができるようになります。

```PowerShell:addo365user1-1.ps1
Connect-MsolService
Import-Csv -Path $Args[0] | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId} | Export-Csv -Path $Args[1] -Encoding UTF8
```

以下のコマンドを実行することでユーザー登録が行えます。

```PowerShell:PowerShell
addo365user1-1.ps1 入力ファイル名 出力ファイル名
```

複数のユーザー登録用ファイルを使って、一気にユーザー登録したい場合には以下のPowerShellを使います。
**Input** ディレクトリにユーザー登録ファイルを置き、ユーザー登録結果は **Output** ディレクトリに書き出されます。

```PowerShell:addo365user2-1.ps1
Connect-MsolService
Get-ChildItem -Recurse -File .\Input |foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId} | Export-Csv -Path  .\Output\$_ -Encoding UTF8}
```

カレントディレクトリの下にInput, Outputディレクトリを作成し、Inputディレクトリにユーザー登録用ファイルを置き、addo365user2.ps1 を実行する。

### 初回ログイン時のパスワード強制変更を無効化する

上記の方法で登録したユーザーは、ユーザーがはじめてログインした際にパスワードの変更が求められます。初回ログイン時の強制パスワード変更を無効にしたい場合には、**-ForceChangePassword $false**  のオプションを追加すればよいです。

```PowerShell:addo365user1-2.ps1
Connect-MsolService
Import-Csv -Path $Args[0] | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -ForceChangePassword $false} | Export-Csv -Path $Args[1] -Encoding UTF8
```

```PowerShell:addo365user2-2.ps1
Connect-MsolService
Get-ChildItem -Recurse -File .\Input |foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -ForceChangePassword $false} | Export-Csv -Path  .\Output\$_ -Encoding UTF8}
```

### 数字のみのパスワードを設定したい

Office 365 のパスワードポリシーは

- 下記4種のうち3種を使用する
 - A – Z
 - a – z
 - 0 – 9
 - @ # $ % ^ & * – _ ! + = [ ] { } | \ : ‘ , . ? / ` ~ “ ( ) ;
- 8文字以上256文字以内
- 変更したひとつ前のパスワードは利用できない

となっています。数字のみのパスワードを設定したい場合には、**-StrongPasswordRequired $false** オプションを追加します。

```PowerShell:addo365user1-3.ps1
Connect-MsolService
Import-Csv -Path $Args[0] | foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -StrongPasswordRequired $false} | Export-Csv -Path $Args[1] -Encoding UTF8
```

```PowerShell:addo365user2-3.ps1
Connect-MsolService
Get-ChildItem -Recurse -File .\Input |foreach {New-MsolUser -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -UserPrincipalName $_.UserPrincipalName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -StrongPasswordRequired $false} | Export-Csv -Path  .\Output\$_ -Encoding UTF8}
```

## ユーザー登録情報の取得

Office 365 に登録されているアカウント情報を取得するには以下のコマンドを実行します。

```PowerShell:PowerShell
Connect-MsolService
Get-MsolUser -all | Expoert-CSV Export-Csv -Path <Output CSV File Path and Name> -Encoding UTF8
```

## ユーザープロパティの一括変更

既に登録されているユーザープロパティを一括変更したい場合には、**Set-MsolUser** コマンドを使用します。ここでは、表示名を一括変更するスクリプトに関して紹介します。

表示名を変更するためのCSVファイルを用意します。

|UserPrincipalName|DisplayName|
| :-- | :--|
|taro@contoso.ac.jp|山田 太郎|
|hanako@contoso.ac.jp|佐藤 花子|

表示名を一括変更するスクリプト(chuserpropaty.ps1)を作成します。

```PowerShell:chuserpropaty.ps1
Connect-MsolService
Import-Csv -Path $Args[0] | foreach {Set-MsolUser -UserPrincipalName $_.UserPrincipalName -DisplayName $_.DisplayName -FirstName $_.FirstName -LastName $_.LastName -Title $_.JobTitle -City $_.City -Office $_.bisinessPhone -Department $_.Department -PostalCode $_.PostalCode -StreetAddress $_.StreetAddress -MobilePhone $_.MobilePhone -State $_.State -Country $_.Country -UsageLocation $_.UsageLocation}
```

ユーザープロパティを変更するために **chuserpropaty.ps1** スクリプトを実行します。

```PowerShell:PowerShell
chuserpropaty.ps1　<Input CSV File Path and Name>
```

## パスワードの変更
既に登録されているユーザーのパスワードを変更したい場合には、*Set-MsolUserPassword** コマンドを使用します。

```PowerShell:PowerShell
Set-MsolUser -UserPrinicpalName ログインアカウント名 -NewPassword パスワード
```

初回ログイン時のパスワード変更を無効にしたい場合には、**-ForceChangePassword $false**オプションを追加します。

```PowerShell:PowerShell
Set-MsolUser -UserPrinicpalName ログインアカウント名 -NewPassword パスワード -ForceChangePassword $false
```

## パスワードの一括変更
既に登録されているユーザーのパスワードを一括変更したい場合には、**Set-MsolUserPassword** コマンドを使用します。


パスワードを変更するためのCSV ファイルを用意します。

|UserPrincipalName|DisplayName|
| :-- | :-- |
|taro@contoso.ac.jp|P@ssw0rd0123|
|hanako@contoso.ac.jp|P@ssw0rd4567|

パスワードを一括変更するスクリプト(chpasswd.ps1)を作成します。

```PowerShell:chpasswd1.ps1
Import-Csv -Path $Args[0] | foreach {Set-MsolUserPassword -UserPrincipalName $_.UserPrincipalName -NewPassword $_.Password}
```

初回ログイン時のパスワード変更を無効にしたい場合には、**-ForceChangePassword $false**オプションを追加します。

```PowerShell:chpasswd2.ps1
Import-Csv -Path $Args[0] | foreach {Set-MsolUserPassword -UserPrincipalName $_.UserPrincipalName -NewPassword $_.Password -ForceChangePassword $false}
```

パスワードの一括変更を行うために **chpasswd2.ps1** スクリプトを実行します。

```PowerShell:PowerShell
chpasswd1.ps1 <Input CSV File Path and Name>
```

## ユーザーの一括削除

削除するユーザーのリストを作成します。

|UserPrincipalName|
| :-- |
|user1@contoso.ac.jp|
|user2@contoso.ac.jp|
|user3@contoso.ac.jp|

ユーザー一括削除用のスクリプトを作成します。

```PowerShell:deluser1.ps1
Import-Csv -Path $Args[0] | foreach {Remove-MsolUser -UserPrincipalName $_.UserPrincipalName -Force}
```

ユーザー一括削除を行うための **deluser1.ps1** スクリプトを実行します。

```PowerShell:PowerShell
deluser1.ps1 <Input CSV File Path and Name>
```
削除されたユーザーはゴミ箱に入り完全には削除されていません。ゴミ箱にいるユーザーは復活させることができます。
ゴミ箱から完全に削除するためのスクリプトは以下になります。

```PowerShell:deluser2.ps1
Import-Csv -Path $Args[0] | foreach {Remove-MsolUser -UserPrincipalName $_.UserPrincipalName -RemoveFromRecycleBin}
```

# グループの管理

##動的グループ

Microsoft 365 GIGA PROMO、Microsoft 365 A3、Microsoft 365 A5 のライセンスをお持ちの教育委員会では、ユーザーのプロパティを参照しあるグループに動的にメンバー追加・削除される機能が利用できます。
この機能を使うと例えば**「教員の勤務学校が変わった場合にも、その教員の勤務学校名を変更するだけで新しい学校のチームのメンバーに追加され元の学校のチームから削除されます。」**　のでグループの管理が楽になります。

##動的グループの作成

[Azure AD の管理画面](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview) にアクセスし、画面左の **[グループ]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/c29dd377-00a1-bb9f-5ce6-f37eff6340d5.png)

**[新しいグループ]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/162ea616-c170-7568-175d-fb4699c9a70c.png)

ここでは例として **「教員のグループ」**を作成します。グループの種類は **「セキュリティ」** を選択し、グループ名に **「教員のグループ」** を入力します。メンバーシップの種類は **「動的ユーザー」**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/2b97e935-fe67-9320-483b-1697e3fb9cc9.png)

次に、動的なメンバーを決めるためのルールを作成します。**[動的クリエを追加]**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/47584b0f-fc1c-12a3-f3ed-5c34ce1310a4.png)

プロパティは **「jobTitle」** を選択し、演算子は **「Equals」** を選択し、値に **「Teacher」** と入力します。最後に **[保存]** をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/e8cd63b9-16c2-5aa4-c4b7-49856db207da.png)

最後に **[作成]**ボタンをクリックしたら、グループが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/f09a4a2e-49ca-7443-b6af-96334c8a8619.png)

マイクロソフト中学校に所属する教員のみのグループを作成したい場合には、以下のようなルールを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/d2fdc859-9ba7-768d-b130-2da2c241c2dd.png)

#ライセンスの割り当て

ユーザー作成時にライセンスを割り当てることも可能ですが、ここではグループにライセンスを割り当てる方法を紹介いたします。まずはじめに **「License_Teacher」**、**「License_Student」**のグループを先に紹介した動的グループで作成しておきましょう。ユーザー作成時に **Title** に **Teacher** もしくは **Student** を入れている場合には、そのプロパティを使って動的グループを作ることができます。

まずはじめに [Azure AD の管理画面](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview) から **[ライセンス]** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/b32506db-5b9e-ea87-0925-ed664d855bbb.png)

次に **[すべての製品]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/e1dbb019-e2c0-3062-4234-1d4d5370bc97.png)

割り当てるライセンスを選択して、**[+割り当て]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/ac4ff569-1377-223d-8d89-559a837dc596.png)

**[ユーザーとグループ]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/7190c360-172c-5de3-7658-f8218bcacba4.png)

ライセンスを割り当てるグループを選択し、選択ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/c8e5e3ee-e2fa-a0d6-a442-128f942fe74d.png)

最後に **[割り当て]** ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/62a6ab8f-fb2b-7b87-3e33-60678852b6af.png)