GIGAスクール年度更新ハンドブック | Microsoft 365 第1版

[**GIGAスクール年度更新ハンドブック| Microsoft 365 第2版**](https://qiita.com/hisaho/items/403bb87c2ed0dbf27727) を作成しました、そちらをご覧ください。


# はじめに

文部科学省の [GIGAスクール構想](https://www.mext.go.jp/a_menu/other/index_00001.htm) により、2021年度には多くの学校で Microsoft 365 の利用が開始されました。本記事では、Microsoft 365 で必要な年度更新のやり方について解説します。


# ユーザー管理(登録、更新、削除)

## PowerShellを使用したユーザー管理のメリット
Microsoft 365 へのユーザー登録は、Microsoft 365 管理センター や Azure Active Directory の管理画面 から一括登録することができますが、1回に登録できるユーザーは**250名**までとなっています。従って、10,000名登録したい場合には、250名 x 40 個の登録用データを作成し、順次登録する必要があります。

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

**※1日に登録できるアカウントは5万アカウントまでとなっています。**

## Microsoft 365 を管理するための PowerShell モジュール
Microsoft 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 11
- 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/cf4144f4-64e2-883a-91f4-6d00c596b13e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/6bd4dd8c-e4b2-c26c-6e3a-3ecc3cf5afcf.png)

Windows Powershellのコンソール上で次のコマンドを実行し、モジュールをインストールします。

```:PowerShell
PS C:\Windows\system32> Insall-Module AzureADPreview
PS C:\Windows\system32> Install-Module MSOnline
```

はじめて PSGallery を利用する場合には、次のメッセージが表示されますので、”Y”と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/71be4d03-2eba-1550-3e17-c10fb3ba518f.png)


## インストールされているモジュールの確認

インストールされたモジュールの確認をするには、次のコマンドを実行します。

```:PowerShell
PS C:\Windows\system32> Get-InstallModule
```

```:出力
Version             Name                           Repository           Description
-------             ----                           ----------           -----------
3.8.0               Az                             PSGallery            Microsoft Azure PowerShell
4.1.0               Az                             PSGallery            Microsoft Azure PowerShell
```

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

インストールしたモジュールをアンインストールしたい場合には次のコマンドを実行します。

```:PowerShell
PS C:\Windows\system32> Uninstall-Module MSOnline
```
## PoserShellスクリプトを実行するための環境設定

PowerShell でスクリプトを書いて実行したとき、以下のエラーが表示されてスクリプトが実行できない場合があります。

```:PowerShell
PS C:\Windows\system32> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\work\test.ps1 を読み込むことができませ
ん。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

```

これは Windows の初期設定では PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因です。次のコマンドを実行して、実行ポリシーを変更します。

```:PowerShell
PS C:\Windows\system32> PowerShell -ExecutionPolicy Unrestricted
```

実行ポリシーが変更されたか次のコマンドを実行して確認します。

```:PowerShell
PS C:\Windows\system32>  PowerShell Get-ExecutionPoliy
Unrestricted
```

ちなみに実行ポリシーとしては以下の種類があります。

|実行ポリシー|署名あり|署名なし/ローカル|署名なし/非ローカル|説明|
|:----------|:----------:|:----------:|:----------:|:----------|
|Restricted|x|x	|x|すべてのスクリプトの実行を制限 (初期設定)|
|AllSigned|o|x|x|署名のあるスクリプトのみ実行可能|
|RemoteSigned|o|o|x|ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能|
|Unrestricted|o|o|△|すべてのスクリプトが実行可能だが非ローカル上のスクリプトは実行時に許可が必要|
|Bypass|o|o|o|すべてのスクリプトが実行可能|


## Windows Terminal のインストール

これらから実施する作業を PowerShellコンソールで実行すると日本語が文字化けする場合がありますので、文字化けをおこさない Windows Terminal をインストールします。

Widows Terminal は Microsoft Store からインストールすることができますので、インストールしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/28e68367-9484-ef83-56e8-737cb5a093a5.png)


## 作業ディレクトリの作成

Windows Terminal を起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/51dabf10-2933-75e8-b809-8a395310ff20.png)

次のコマンドを実行して作業ディレクトリを作成します。

```:PowerShell
PS C:\Users\admin> cd Documents　← Docuements ディレクトリに移動
PS C:\Users\admin\Documents> mkdir work ← workというディレクトリを作成
PS C:\Users\admin\Documents> cd work ← work ディレクトリに移動
PS C:\Users\admin\Documents\work> mkdir bin ← Powershellスクリプトを置くディレクトリを作成
PS C:\Users\admin\Documents\work> mkdir 20220220 ← 実際に作業する作業日のディレクトリを作成
```

ディレクトリ操作で覚えておきたいコマンド

|コマンド|説明|
|:---|:---|
|pwd|現在いるディレクトリを表示|
|dir|現在いるディレクトリにあるファイルやディレクトリを表示|
|cd (Directory)|指定したディレクトリに移動|
|cd ..|一つ上のディレクトリに移動|
|cd c:\Users\admin\work\20200222|指定したディレクトリに移動|
|cls|画面表示をクリア|
|rmdir （Directory)|指定したディレクトリを削除|
|rm (File)|指定したファイルを削除|


以下に実際のコマンド実行例を示します。

```:PowerSHell
PS C:\Users\admin> cd Documents ← Documentsディレクトリに移動
PS C:\Users\admin\Documents> pwd ← 現在いる場所を確認
Path
C:\Users\admin\Documents

PS C:\Users\admin\Documents> midir work ← workディレクトリを作成

    ディレクトリ: C:\Users\admin\Documents


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/02/20     10:39                work

PS C:\Users\admin\Documents> dir ← 現在いるディレクトリにあるファイルやディレクトリを表示

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/02/20     10:39                work

PS C:\Users\admin\Documents> cd work
PS C:\Users\admin\Documents\work> pwd ← 現在いる場所を確認
Path
C:\Users\admin\Documents\work

PS C:\Users\admin\Documents\work> mkdir 20220222 ←作業日付のディレクトリを作成

    ディレクトリ: C:\Users\admin\Documents\work

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/02/20     10:40                20220222


PS C:\Users\admin\Documents\work> cd ..　← 1つ上のディレクトリに移動

PS C:\Users\admin\Documents\> pwd ← 現在いる場所を確認
Path
C:\Users\admin\Documents
```

## 現在 Microsoft 365 に登録されているユーザーをCSVファイルに出力する

作業ディレクトリに移動して、次のコマンドを実行します。

```:PowerShell
C:\Users\admin\> cd Documents\work\20220222
C:\Users\admin\work\20220222> Connect-MsolService ← Microsoft 365 に接続
```

サインインの画面が表示されますので、Microsoft 365の管理者IDとパスワードでサインインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/919828f9-f6d0-4e7d-214f-7ad3f0c7f96f.png)

サインできたら次のコマンドを実行して現在登録されているユーザー情報を取得します。

```:PowerShell
C:\Users\admin\work\20220222> Get-MsolUser -all | Export-CSV -Path AllUserss-YYYYMMDD.csv -Encoding UTF8
```

作業ディレクトリにAllUsers-YYYYMMDD.csvというファイルが作成され、現在登録されているユーザー情報が記録されます。

## ユーザー情報の更新

### ユーザー情報を更新するためのCSVファイルの作成
出力されたCSVファイルをExcelなどで開き、更新する属性値を変更します。変更できたらファイル名をModUsers-Input-YYYYMMDD.csv として保存します。

### 更新用 PowerShell スクリプトの作成
メモ帳などで次のPowerShellスクリプトを作成してC:\Users\admin\Documents\work\bin\ModUser.ps1 に保存します。

```PowerShell:ModUsers.ps1
Import-CSV -Path ARGS[0] -Encoding UTF8 |foreach{Set-MsolUser -ImmutableId $_.ImmutableId -ObjectId $_.ObjectId -UserPrincipalName $_.UserPrincipalName -City $_.City -Country $_.Country -Department $_.Department -Fax $_.Fax -FirstName $_.FirstName -LastName $_.LastName -MobilePhone $_.MobilePhone -Office $_.Office -PhoneNumber $_.PhoneNumber -PostalCode $_.PostalCode -State $_.State -StreetAddress $_.StreetAddress -Title $_.Title  -UsageLocation $_.UsageLocation} |Export -CSV -Path ARGS[1] -Encoding UTF8
```

### PowerShellスクリプト(ModUsers.ps1)によるユーザー情報の更新

次のコマンドを実行してユーザー情報を更新します。

```:PowerShell
C:\Users\admin\work\20220222> C:\Users\admin\Documents\work\bin\ModUsers.ps1 ModUsers-Input-YYYYMMDD.csv ModUsers-Output-YYYYMMDD.csv
もしくは
C:\Users\admin\work\20220222>　..\bin\Modusers.ps1 ModUsers-Input-YYYYMMDD.csv ModUsers-Output-YYYYMMDD.csv
```

## ユーザーの削除

###ユーザーを削除するためのCSVファイルの作成
削除するユーザーリスト(DelUsers-Input.csv)を作成します。
１行目に **UserPrincipalName** と入力し、2行目以降に削除したいユーザーのUserPrincipalNameを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5fe16760-aa51-6f6a-999a-49f2b7ea98b3.png)

### ユーザー削除用 PowerShell スクリプトの作成

メモ帳などで次のPowerShellスクリプトを作成してC:\Users\admin\Documents\work\bin\DelUsers.ps1 に保存します。

```PowerShell:DelUsers.ps1
Import-Csv -Path $ARGS[0] | foreach {Remove-MsolUser -UserPrincipalName $_.UserPrincipalName -Force} | Export-Csv -Path $ARGS[1] -Encoding UTF8
```

### PowerShellスクリプト(DelUsers.ps1)によるユーザーの削除
次のコマンドを実行してユーザーを削除します。

```:PowerShell
C:\Users\admin\work\20220222> C:\Users\admin\Documents\work\bin\DelUsers.ps1 Delusers-Input-YYYYMMDD.csv Delusers-Output-YYYYMMDD.csv
もしくは
C:\Users\admin\work\20220222> ..\bin\deluser.ps1 Deluser-Input-YYYYMMDD.csv Deluser-Output-YYYYMMDD.csv
```

このコマンドで削除したユーザーは完全削除はされず、削除済みのユーザーとして Microsoft 365 上に残っています。[Azure Active Directory のポータルサイト](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview) にアクセスすることで、削除済みのユーザーを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/e75e7bb3-5a0e-a8e9-033c-06d98414cfa5.png)

この画面からユーザーを選択し、**[完全に削除]**、**[ユーザーの復活]** ボタンをクリックすることで、ユーザーの完全削除や復活が行えます。完全削除したユーザーは復活できないので注意してください。
削除済みのユーザーは30日後に自動削除されます。削除日は[Azure Active Directory のポータルサイト](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview)からも確認することができます。

## ユーザーの完全削除

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

```:PowerShell
C:\Users\admin\work\20220222> Get-MslUser -ReturnDeletedUsers -all | Export-CSV -Path DeletedUsers-Input-YYYYMMDD.csv -Encoding UTF8
```

### 完全削除用PowerShell スクリプトの作成

メモ帳などで次のPowerShellスクリプトを作成してC:\Users\admin\Documents\work\bin\FullDelUsers.ps1 に保存します。

```PowerShell:FullDelUsers.ps1
Import-Csv -Path $ARGS[0] | foreach {Remove-MsolUser -UserPrincipalName $_.UserPrincipalName -Force -RemoveFromRecycleBin} | Export-Csv -Path $ARGS[1] -Encoding UTF8
```

### PowerShellスクリプト(FullDelUsers.ps1) によるユーザーの完全削除
FullDelUsers.ps1 スクリプトを使用して、ユーザーを完全削除します。

```:PowerShell
C:\Users\admin\work\20220222> C:\Users\admin\Documents\work\bin\FullDelUsers.ps1 DeletedUsers-Input-YYYYMMDD.csv DeletedUsers-Output-YYYYMMDD.csv 
または
C:\Users\admin\work\20220222>　..\bin\FullDelUsers.ps1 DeletedUsers-Input-YYYYMMDD.csv DeletedUsers-Output-YYYYMMDD.csv 
```

## ユーザーの登録

###ユーザー登録用のCSVファイルの作成
ユーザー登録用のCSVファイル(AddUsers-Input-YYYYMMDD.csv)は、1行目にタイトル、2行目以降に登録するユーザー情報を入力します。1ファイルで登録できるユーザーは1,000名です。1,000名以上登録したい場合には、複数の登録用のファイルを作成します

```:登録用CSVファイルの1行目
UserPrincipalName,Password,DisplayName,FirstName,LastName,JobTitle,City,businessPhone,Department,PostalCode,streetAddress,MobilePhone,State,Contry,UsageLocation,AccountSkuLd
```


|ラベル名|必須|説明|
|:--|:--|:--|
|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 コマンドで取得したもの)|
◎：必須
〇：必須ではないが、登録しておくと後々役に立つ
×：必須ではない(未登録でも問題ない)

### テナントで使用できるライセンス名の取得

テナントで使用できるライセンスは **Get-MsolAccountSku** コマンドを実行して確認します。

```:PowerShell
C:\Users\admin\work\20220222> 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
```

### ユーザー登録用 PowerShell スクリプトの作成

メモ帳などで次のPowerShellスクリプトを作成してC:\Users\admin\Documents\work\bin\AddUsers1.ps1 に保存します。

```PowerShell:AddUsers1.ps1
Import-CSV -Path ARGS[0] -Encoding UTF8 |foreach{New-MsolUser -UserPrincipalName $_.UserPrincipalName -City $_.City -Country $_.Country -Department $_.Department -Fax $_.Fax -FirstName $_.FirstName -LastName $_.LastName -MobilePhone $_.MobilePhone -Office $_.Office -PhoneNumber $_.PhoneNumber -PostalCode $_.PostalCode -State $_.State -StreetAddress $_.StreetAddress -Title $_.Title  -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId} |Export -CSV -Path ARGS[1] -Encoding UTF8
```

### PowerShellスクリプト(AddUsers1.ps1)によるユーザーの登録

AddUsers1.ps1 スクリプトを使用して、ユーザーを登録します。

```:PowerShell
C:\Users\admin\Documents\work\20220222> C:\Users\admin\Documents\work\bin\AddUsers1.ps1 AddUsers-Input-YYYYMMDD.csv AddUsers-Output-YYYYMMDD.csv
```

登録用のCSVファイルにパスワードが記載されていない場合には、ユーザー登録結果ファイル(AddUsers-Outpub-YYYYMMDD.csv)に登録時に自動生成されたパスワードが記録されます。

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

**AddUser1.ps1**スクリプトで作成されたユーザーは初めてサインインした際にパスワード変更が求められます。初回サインイン時の強制パスワード変更を無効化したい場合には、**-ForceChangePassword $false** オプションを追加します。

```PowerShell:AddUsers2.ps1(初回サインイン時の強制パスワード変更を無効化)
Import-CSV -Path ARGS[0] -Encoding UTF8 |foreach{New-MsolUser -UserPrincipalName $_.UserPrincipalName -City $_.City -Country $_.Country -Department $_.Department -Fax $_.Fax -FirstName $_.FirstName -LastName $_.LastName -MobilePhone $_.MobilePhone -Office $_.Office -PhoneNumber $_.PhoneNumber -PostalCode $_.PostalCode -State $_.State -StreetAddress $_.StreetAddress -Title $_.Title  -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -ForceChangePassword $false} |Export -CSV -Path ARGS[1] -Encoding UTF8
```

### 数字のみのパスワードを設定できるようにする

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

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

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

```PowerShell:AddUsers3.ps1(初回サインイン時の強制パスワード変更を無効化、数字のみのパスワードを可)
Import-CSV -Path ARGS[0] -Encoding UTF8 |foreach{New-MsolUser -UserPrincipalName $_.UserPrincipalName -City $_.City -Country $_.Country -Department $_.Department -Fax $_.Fax -FirstName $_.FirstName -LastName $_.LastName -MobilePhone $_.MobilePhone -Office $_.Office -PhoneNumber $_.PhoneNumber -PostalCode $_.PostalCode -State $_.State -StreetAddress $_.StreetAddress -Title $_.Title  -UsageLocation $_.UsageLocation -LicenseAssignment $_.AccountSkuId -ForceChangePassword $false} |Export -CSV -Path ARGS[1] -Encoding UTF8
```

## 各教育委員会毎、各学校毎にユーザー管理をさせたい

Microsoft 365 の管理ポータルや PowerShell ですと各教育委員会毎、各学校毎にユーザー管理をすることは難しいはずです(間違って管理外の他の学校のユーザーを消してしまったなどの事故を防ぐことができない)。そのような分散ユーザー管理を行うツールとして、Microsoft のパートナーの PRGDENCE が Excel でユーザー管理を行える [**School Shuttle**](https://www.progdence.co.jp/schoolshuttle/) という製品を販売しています。有償の製品ですが、Excelシートからユーザーの登録、編集、削除が行え、自分が担当している部門のみのアカウントのメンテナンスが行えるようになっています。教育委員会ですべてのアカウントの管理をするのが難しい場合にはこのような製品の購入を検討してみてはいかがでしょうか。

## 年度更新時の一時的なライセンス不足への対応

ほとんどの教育員会は3月末に新入生のアカウントを作成し、卒業生のアカウントは5月連休明けに削除するといったスケジュールをしているのでないでしょうか。この場合、一時的に購入しているライセンス数をユーザー数が上回ってしまい、新入生にライセンスが付与できないといった問題が発生します。

新入生アカウントにライセンスを割り当てるには適切に卒業生アカウントからライセンスをはく奪する必要があります。しかしすべてのライセンスをはく奪してしまうと卒業生はサービスを利用できなくなってしまいますので、ここではOffice 365 A1のライセンスのみを卒業生に割り当て、その他のライセンス Microsoft 365 GIGA PROMO や Microsoft 365 A3, A5 をはく奪するといった方法をとります。

ユーザーに割り当てられたライセンスを削除する/新しいライセンスを付与するには **Set-MsoUserLicense** コマンドを使用します。

今後の運用を考えると、年度更新でライセンスの削除、付与を **Set-MsoUserLicense** コマンドで行うのは手間なので、グループに対してライセンスを割り当てるといった方法に変更し、グループへのユーザー登録を動的メンバーシップで行う方法をとります。

### ライセンスの割り当て方法の手順

ユーザーに割り当てられたライセンスをグループに割り当てるには次の手順で行います。

1. ライセンスを割り当てる動的メンバーシップグループの作成する
2. 動的メンバーシップで利用するユーザー属性値に適切な値を入力する
3. ユーザーに静的に付与されたライセンスを削除する
4. 動的グループにライセンスを割り当てる

### ライセンスを割り当てる動的メンバーシップグループの作成

GIGA PROMO, Microsoft 365 A3,A5 が利用できるテナントでは、動的メンバーシップが利用できます。動的メンバーシップグループとは、ユーザーの属性情報を元に動的にグループにユーザーを入れることができるグループです。

動的メンバーシップグループは、[Azure Active Directory の管理画面](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview) から作成します。
Azure Active Directory の管理画面が表示されたら、画面左ペインの **[グループ]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/78356a56-6812-8325-e271-f9ac2c0d85b6.png)
画面上の**[新しいグループ]**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/460c9576-2ba4-55c7-071a-a90637f5f31a.png)
「グループの種類」は **[セキュリティ]** を選択し、「グループ名」に **"L_O365A1+GIGAPROMO"** と入力し、「グループの説明」に **"O365A1とGIGAPROMOを割り当てるグループ"**と入力し、「メンバーシップの種類は **[動的ユーザー]** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/b9b46748-fb3d-2fa5-0c42-7a15321a9106.png)
次に **[動的クリエの追加]** をクリックします。ここではライセンスの付与を決める属性値を **businessPhone(telephoneNumber)** にした場合のついて説明します。
「プロパティ」は **[businessPhone]**を選択し、「演算子」は **[Equals]** を選択します。「値」には **"O365A1+GIGAPROMO"** と入力します。入力が完了したら **[保存]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/7fd76e06-a9d5-4964-3786-d9b645a6e571.png)
**[作成]** ボタンが押せるようになるので、**[作成]** ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/0cc8eee3-b925-4268-2023-9f6fe38c5d9b.png)
同じように **L_O365A1** というグループも作成します。動的クリエでは「値」を **"O365A1"** と入力します。

### 動的メンバーシップで利用するユーザー属性値の更新する
「ユーザー情報の更新」を参照し、businessPhoneに　**"O365A1+GIGAPROMO"** もしくは **"O365A1"**の値を入れます。

### ユーザーに静的に付与されたライセンスを削除する
ライセンスを削除するユーザーリスト (RemoveUserLicenses-YYYYMMDD.csv) を作成します。１行目には "UserPrincipalName" と入力し、2行目以降に削除するユーザーの UserPrincipalName を入力します。
ユーザーのライセンスを削除するには次のコマンドを実行します。

```:PowerShell
C:\Users\admin\work\2022022> Import-CSV -Path RemoveUserLicenses-YYYYMMDD.csv | foreach{Set-MsolUserLicense -UserPrincipalName $_.UserPrincipalName -RemoveLisense "<AccountSkuId1>","<AccountSkuId2>"}
```
**AccountSkuId1,2** には実際にユーザーに割り当てられているライセンス名を入れてください。

### 動的グループにライセンスを割り当てる
動的グループにライセンスを割り当てるには Azure AD の管理画面から[グループ]をクリックし、ライセンスを割り当てるグループをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/43758345-b60d-cde1-53a0-44377d56e7ff.png)
グループが表示されたら **[ライセンス]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/75cb6c09-f45e-0417-e64a-998d1c04ef6c.png)
**[割り当て]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/68a5a073-d3d7-2c44-d886-473dad546c7a.png)
割り当てるライセンスにチェックを入れ、**[保存]**ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/300c326b-91f2-fe37-8537-3fd1335b2de5.png)

### 動的メンバーシップグループにライセンスを割り当てるメリット
動的メンバーシップグループにライセンスを割り当てることで、ユーザーの属性情報を見るだけでどのライセンスを割り当てられているかがすぐにわかります。またユーザーの属性情報を変更するだけで使用できるライセンスが変更されるので年度更新処理のようにアカウントを削除する前ライセンスを変更・削除する場合にはこのようなライセンスを付与する方法がベストです。この例ではユーザーのある属性値に使用するライセンス名を入れるようにしましたが、ユーザーのある属性値に現在のステータス(在学、卒業処理)をいれて、その属性値を元に動的メンバーシップグループを作成し、ライセンスを割り当てる方法でもよいかもしれません。このようにすれば、ユーザーを削除するときにも、ユーザー一覧を取得した後に、現在のステータスでフィルタリングをかけて、削除するユーザー一覧を簡単に作ることができます。

## ユーザーやグループ(Teamsのチーム)が作成できなくなった時に確認すべきこと

Microsoft 365 を運用しているとユーザーやグループ(Teamsのチーム)が作成できなくなるといった問題が起きることがあります。これはほとんどの場合、テナントに割り当てられていたオブジェクト数をすべて使い切ってしまったことが原因です。一般的にカスタムドメインを登録していないテナントでは**5万オブジェクト**、カスタムドメインを登録したテナントでは**30万オブジェクト**まで利用できます。ユーザーやグループを1つ作成すると1オブジェクト消費されます。**削除されたユーザーも完全にユーザーを削除していない場合には1オブジェクト消費しています。**
現在利用しているテナントでどれくらいオブジェクトを消費しているかは、Graph Explorer を使用して確認することができます。

### Graph Explorer による消費オブジェクト数の確認
1. Webブラウザで [Graph Explorer](https://developer.microsoft.com/en-us/graph/graph-explorer) にアクセスします。
2. Graph Explorer が表示されたら、左ペインの**[Sign in to Graph Explorer]**をクリックし、Microsoft 365 の管理者アカウントでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/089dba03-3450-3cdb-c54b-08d4f7c11a76.png)
3. バージョンは **[beta]**を選択し、クエリに "https://graph.microsoft.com/beta/organization?$select=directorySizeQuota" と入力し、**[Run query]** ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/b2035c10-64a0-a4e8-203b-4fc5f37e8968.png)
4. 画面下の**「Response preview]**に現在消費しているオブジェクト数とテナントに割り当てられたオブジェクト数数が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/940bc3b2-17bd-c808-b00c-ef070c6dbe58.png)

### オブジェクト数が足りなくなった場合
オブジェクト数が足りなくなった場合は、Microsoft 365ポータルからオブジェクト数を増やす
よう依頼してください。

# Windows 端末の初期化

## 「Autopilot リセット」と「工場出荷時の設定へのリセット」

[Intune for Education の管理画面](https://intuneeducation.portal.azure.com/) を見てわかるように、Windows 端末の初期化方法は**[Autopilot リセット]** と **[工場出荷時の設定へのリセット]** の2つが利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/59c22c1e-b0b4-ceff-c591-af143963cbb2.png)

**[Autopilot リセット]** と **[工場出荷時の設定へのリセット]** との違いを以下に示します。

|削除項目|Autopilot リセット|工場出荷時の設定へのリセット|
|:--|:--:|:--:|
|個人が追加したデータ|削除|削除|
|個人で行った設定|削除|削除|
|インストールされたアプリ|削除|削除|
|地域・言語・キーボードの設定|設定は維持される|設定は削除|
|WiFiの設定|設定は維持|設定は削除|
|プロビジョニングパッケージ|残る|削除|
|Azure AD への登録状態の維持|維持|新しいデバイスとして再登録が必要|

GIGAスクール端末では**[Autopilot リセット]**での Windows 端末の初期化を推奨します。

## [工場出荷時の設定へのリセット] した場合に実施しなければいけないこと

**[工場出荷時の設定へのリセット]** してしまった場合には、プロビジョニングパッケージを使い、再度端末設定を行い端末を Azure AD に登録し、Intune for Education (または Microsoft Endpoint Manager) で管理できるようにする必要があります。

## [Autopilot リセット] した場合に実施しなければいけないこと
**[Autopilot リセット]**した端末は、そのまま児童生徒に渡し、Microsoft 365 のアカウントでサインすればすぐに利用が開始できます。

## [Autopilot リセット]を 実施するための準備
**[Autopilot リセット]**は特定の端末やあるグループに所属しているすべての端末を初期化することができます。卒業生が使っていた端末をすべてに初期化するには、卒業生が使っていた端末を特定し、その端末をすべて初期化用のグループに入れ、そのグループに所属するすべての端末を**[Autopilot リセット]**を使って初期化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/81ffe460-5220-2fb7-0938-2571cba0efd3.png)


### 削除するユーザーが使っていた端末を特定する

削除するユーザーが使っていた端末を特定するためには、削除するユーザーのUserPrincipalNameが必要です。ユーザーの削除でも利用したCSVファイル(DeleteUsers.csv)を用意します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/cf4ceffd-b27e-c637-952d-ae846b7d520a.png)

次のコマンドを実行して、削除するユーザーが利用していた端末リストを作成します。

```:PowerShell
C:\Users\admin\Documents\work\20220222> Import-CSV -Path DeleteUsers.vsv | foreach{Get-MsolDevice -RegisteredOwnerUpn $_.UserPrincipalName} |Export-csv -Path ResetDevices.csv
```

### 端末リセット用のグループを作成する

次のコマンドを実行して、端末リセット用のグループを作成します。

```:PowerShell
C:\Users\admin\Documents\work\20220222> New-MsolGroup -DisplayName "ResetDevices" -Description "端末初期化用のデバイスグループ"


ObjectId                               DisplayName                GroupType                  Description
--------                               -----------                ---------                  -----------
70d183c7-7f83-42d2-ab61-520767055625   ResetDevices               Security                   端末初期化用グループ
```

### 作成したグループに初期化する端末を登録する

次のコマンドを実行して、端末リセット用のグループに初期化するデバイスを登録します。ObjectIdは、グループを作成した際に表示されているGroupObjectIdを入れます。

```:PowerSHell
C:\Users\admin\Documents\work\20220222> Import-CSV -Path ResetDevices.csv | foreach{Add-MsolGroup -GroupObjectId 70d183c7-7f83-42d2-ab61-520767055625 -GroupMemberType User -GroupMemberObjectId $_.UserPrincipalName}
```

## [Autopilot リセット]による端末の初期化

Intune for Education の管理画面から端末を初期化します。手順は次の通りです。

1. 画面左側のペインの**[グループ]**を選択し、先ほど作成したグループを選択します。
2. **「デバイス」**横のチェックボタンをクリックし、すべてのデバイスを選択します。
3. **[Autopilot リセット]**をクリックし、端末を初期化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/ded73507-5702-1dfc-856d-756bb79e0446.png)