第2期GIGAスクールに向けた Microsoft 365 運用管理ガイド | 第3章 アカウント管理

[第2章 Microsoft 365 ←](https://qiita.com/hisaho/items/d27ef3a813984359c3f0)　[→第4章 デバイス管理]()

# 第3章 アカウント管理

## 3.1 アカウント管理ツール M365AdminTools

### M365AdminToolsの概要

Microsoft 365のアカウント管理は、一般的にMicrosoft 365管理センターを通じて行います。管理センターは GUI (Graphical User Interface) ベースで設計されており、ユーザーフレンドリーなインターフェースを提供します。しかし、大量のアカウントの追加、編集、削除を行う場合、GUIでの操作は効率的ではありません。

そこで、CLI（コマンドラインインターフェース）を使用してアカウントのメンテナンスを行うためのツールとして、M365AdminTools を開発しました。

M365AdminTools は、CSV ファイルを用いて Microsoft 365 のアカウントを効率的に管理するためのスクリプト群です。このツールを使用することで、大量のアカウントを一度に追加、編集、削除することが可能になります。以下に M365AdminTools の主な機能を説明します。

#### 主な機能

- **ライセンス情報の取得**
テナントで使用できるライセンス情報を取得します。
- **ライセンスの付与**
アカウントにライセンスを付与します。
- **ライセンスのはく奪**
アカウントに付与されたライセンスをはく奪します。
- **アカウントリストの取得**
テナントに登録されているアカウントリストを取得します。
- **アカウント登録**
CSVファイルを使用してアカウントの一括登録します。
- **アカウント削除**
CSVファイルを使用してアカウントの削除します。
- **削除済みのアカウントを削除**
削除済みのアカウントを一括削除します。
- **Temporary Access Pass の発行**
アカウント登録されているユーザーに Temporary Acces Pass を発行します。

### PowerShell 7.x のインストール

M365AdminTools を利用するには、PowerShell 7.x が必要です。PowerShell 7.x がインストールされていない場合は、以下の手順に従って PowerShell 7.x をインストールしてください。

- $PSVersionTable で PowerShell のバージョンを確認します。
   ```powershell
   PS> $PSVersionTable
   
   Name                           Value
   ----                           -----
   PSVersion                      5.1.22621.3930
   PSEdition                      Desktop
   PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
   BuildVersion                   10.0.22621.3930
   CLRVersion                     4.0.30319.42000
   WSManStackVersion              3.0
   PSRemotingProtocolVersion      2.3
   SerializationVersion           1.1.0.1
   ```
- 最新のバージョンの PowerShell を検索します。
   ```powershell
   PS> winget search Microsoft.PowerShell
   名前               ID                           バージョン ソース
   ------------------------------------------------------------------
   PowerShell         Microsoft.PowerShell         7.4.3.0    winget
   PowerShell Preview Microsoft.PowerShell.Preview 7.5.0.3    winget
   ```
- 最新の PowerShell をインストールします。
   ```powershell
   PS> winget install --id Microsoft.Powershell --source winget
   ```
- インストールが完了すると [**スタート**] メニューで [**PowerShell 7**] が選択できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/bab35d1f-345f-1b0a-9cc1-e8386f698288.png)
- PowerShell 7 を起動して、バージョンを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/005e354f-8fbe-7035-0428-0eb9e1822783.png)

### Microsoft.Graph モジュールのインストール

M365AdminToolsは Microsoft.Graph モジュールを必要としますので、以下の手順に従ってMMicrosoft.Graph モジュールをインストールしてください。

- まず、PowerShellを起動します。Windowsでは [**スタート**] メニューから[**Windows PowerShell 7**] を管理者で起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/cdb237b4-8688-d5a8-29aa-788d42b9b40e.png)
- PGGallary を信頼できるレポジトリに設定します。初期設定では PSGallery レポジトリは信頼されていないリポジトリして設定されています。```Get-PSRepository``` を実行すると ``Untrsted`` と表示されます。
   ```powershell
   PS> Get-PSRepository
       
   Name                      InstallationPolicy   SourceLocation
   ----                      ------------------   --------------
   PSGallery                 Untrusted            https://www.powershellgallery.com/api/v2
   ```
- このまま Microsoft Graph PowerShell モジュールをインストールすることもできますが警告メッセージが表示されます。警告メッセージを表示させないようにするには、PSGallery の InstallationPolicy を Trusted に変更します。
   ```powershell
   PS> Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
   PS> Get-PSRepository
    
   Name                      InstallationPolicy   SourceLocation
   ----                      ------------------   --------------
   PSGallery                 Trusted              https://www.powershellgallery.com/api/v2   
   ```
- InstallationPolicy が Trusted に変更されたか確認します。
   ```powershell
   PS> Get-PSRepository
       
   Name                      InstallationPolicy   SourceLocation
   ----                      ------------------   --------------
   PSGallery                 Trusted              https://www.powershellgallery.com/api/v2
   ```
- Microsoft.Graph モジュール インストールします。
   ```powershell
   PS > Install-Module Microsoft.Graph -Scope CurrentUser
   ```
- インストールされたかを確認します。
   ```powershell
   PS > Get-Module -ListAvailable Microsoft.Graph
    
      Directory: C:\Users\XXXXXXXXX\Documents\PowerShell\Modules
    
   ModuleType Version    PreRelease Name                     PSEdition ExportedCommands
   ---------- -------    ---------- ----                     --------- ----------------
   Manifest   2.19.0     Microsoft.Graph                     Core,Desk
   ```
- これにより、Microsoft Graphモジュールが正常にインストールされたことを確認できます。

### Microsoft.Graph.Authentication のインストール

- Microsoft.Graph.Authentication モジュールは、Microsoft Graph API にアクセスするための認証を提供する PowerShell モジュールです。このモジュールを使用することで、Microsoft 365 やその他の Microsoft サービスのデータに安全にアクセスし、操作することができます。後述するクライアントクレデンシャルを使用したスクリプトを使用する場合に必要となるモジュールです。

   ```powershell
   PS > Install-Module -Name Microsoft.Graph.Authentication
   ```

### PowerShell の実行ポリシーの変更

Microsoft Graph PowerShellを使用するためには、PowerShellの実行ポリシーを適切に設定する必要があります。以下の手順に従って設定を行います：
- 実行ポリシーを確認します。
   ```powershell
   PS > Get-ExecutionPolicy
   Restricted
   ```
-  実行ポリシーが「**Restricted**」になっている場合、以下のコマンドを使用して「**RemoteSigned**」または「**Unrestricted**」に変更します。これにより、リモートで取得したスクリプトも実行可能になります。
   ```powershell
   PS > Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
   ```
- 変更が反映されていることを確認します。
   ```powershell
   Get-ExecutionPolicy
   ```

### Microsoft Graph PowerShell への接続確認

- インストールと設定が完了したら、Microsoft Graph PowerShellに接続します。以下のコマンドを実行します。
- このコマンドを実行すると、Microsoft 365アカウントへの認証を求められます。認証が成功すると、Microsoft Graph PowerShellを使用してアカウント管理タスクを実行できるようになります。

   ```
   PS> Connect-MgGraph -Scopes "User.ReadWrite.All"
   
   Welcome to Microsoft Graph!
   
   Connected via delegated access using XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX
   Readme: https://aka.ms/graph/sdk/powershell
   SDK Docs: https://aka.ms/graph/sdk/powershell/docs
   API Docs: https://aka.ms/graph/docs 
   
   NOTE: You can use the -NoWelcome parameter to suppress this message.
   ```

以上で、Microsoft Graph PowerShellを使用したアカウント管理の準備が整いました。

### Git のインストール

M365AdminToolsはGitHubで公開されているため、M365AdminToolsをダウンロードするにはGitをインストールする必要があります。以下に、Windows OS への Git のインストール手順を示します。

- [Git for Windowsの公式サイト](https://gitforwindows.org/)にアクセスし、「Download」ボタンをクリックしてインストーラーをダウンロードします。
- ダウンロードしたインストーラーを実行します。
- インストーラーの指示に従ってインストールを進めます。デフォルトの設定で問題ありませんが、必要に応じて設定を調整してください。
- インストールが完了したら、「Git Bash」や「Git GUI」などのツールが使用できるようになります。

### M365AdminTools のダウンロード

- PowerShell 7 を起動し、以下のコマンドを実行し、リポジトリをクローンします。
   ```
   PS> cd $HOME
   PS> git clone https://github.com/yourusername/M365AdminTools.git
   ```
- $HOME/M365AdminTools が作成され、ディレクトリ内にスクリプトが作成されます。
- PATHの設定を追加するために、setup.ps1を実行します。
    ```
    PS> cd $HOME/M365AdminTools
    PS> ./setup.ps1
    ```
- PATH が追加されたか確認します。[**設定**]→[**システム**]→[**バージョン情報**]→[**システムの詳細設定**] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5eb07234-3668-1ee4-765c-32c02eee588d.png)
- [**環境変数**] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/226d8c00-5624-7f35-6632-9e0c9941d469.png)
- [**Path**] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/9d1a6307-c00d-9fd5-a439-e3487d8dfcdc.png)
- $HOME\Documents\M365AdminTools\scripts が追加されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/bfecc432-1b64-bb39-63de-16c69bade788.png)
※画面キャプチャーは ```$HOME\M365AdminTools-work\scripts``` になっていますが、本来は```$HOME\M365AdminTools\scripts``` です。


### シークレットクレデンシャルを使用するための準備

Microsoft Graph PowerShell を使用して Microsoft Graph API にアクセスする際、認証が必要です。認証には、パスワード認証とシークレットクレデンシャルを使った方法の2つがあります。自動化スクリプトやバックグランドジョブで使用する場合にはシークレットクレデンシャルを使った方法を選択する必要があります。
シークレットクレデンシャルは、Entra ID アプリケーションに登録されたクライアントシークレットを使って認証する方法です。以下にシークレットクレデンシャルの作成手順を示します。

- [Entra ID 管理センター](https://entra.microsoft.com/) にサインインします。
- 左ナビゲーションペインから [**アプリケーション**]→[**アプリの登録**] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/b0916404-81eb-93ff-7a44-4f4a5a2be289.png)
- [**新規登録**] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5e843e49-d06f-29f0-eb28-92197b4d3062.png)
- **「名前」** は **"M365AdminPowerShell"** とし、**「サポートされているアカウントの種類」** は **[この組織でぃれt九取りの実に含まれるアカウント(Contoso のみ - シングルテナント)]** とします。 **[登録]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/f430894e-2cef-c8ce-7848-3240b09759a5.png)
- 次にクライアントシークレットを作成します。　**[証明書またはシークレット追加]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/9b5d2d2b-c5ad-77f6-cce7-567d31d39fff.png)
- このクライアントシークレットの説明と有効期限を設定し、 **[追加]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/c507e87f-8fc8-c224-ddef-fe082fc24e86.png)
- クライアントシークレットが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5ece76ec-2744-a51d-ffaa-cdc3b53a7237.png)
IDは後から必要になってきますので必ずメモしておいてください。
<font color="Red">**※ IDは再確認することができませんので、記録し忘れた場合はクライアントシークレットを再作成してください。</font>**
- つづいてAPIのアクセス許可の設定を行います。 **[API のアクセス許可]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/f0ebfac2-35f3-9285-569a-dd9ba413c38f.png)
- **[アクセス許可の追加]** をクリックし、アクセス権の追加を行っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/0f8b25cd-152a-2913-d32f-ba2d0d7b62ec.png)
- **[Microsoft Graph]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/ee08dce0-7502-874c-db73-87201dbcca20.png)
- **[アプリケーションの許可]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/90567f63-8ac6-9c4d-097f-465c1981fbf9.png)
- アクセス許可を要求するAPIを選択します、 **[アクセス許可の追加]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/43326055-f944-70be-28de-578c556f477d.png)
- **[Contoso に管理者の同意を与えます]** をクリックし、 **[はい]** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/5c30c734-5a5a-1c04-20b0-093f1241c7d1.png)
- 状態が **「Contoso に付与されました」**　になれば設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/bf39ab1c-4bf8-bd0a-0175-6ff4686dd74c.png)

:::note info
### どのAPI を許可すればよいのか

どのAPIを許可すればよいのかは、[**「Microsoft Graph のアクセス許可のリファレンス」**](https://learn.microsoft.com/ja-jp/graph/permissions-reference?source=recommendations) を参照してください。M365AdminToolsでアクセス許可を必要とする API 一覧を示します。

|Action |API |
|---|---|
|ライセンスの確認|Organization.Read.All|
|ユーザーのプロファイルの読み取り、書き込み|User.ReadWrite.All| 
|グループのプロファイルの読み取り、書き込み|Group.ReadWrite.All|
:::

### クライアントシークレットを記入するファイルの作成

- ``$HOME\M365AdminToos\scripts\credentials.json.sample`` を　``$HOME\M365AdminToos\scripts\credentials.json`` にコピーします。
   ```
   PS> cp $HOME\M365AdminToos\scripts\credentials.json.sample $HOME\M365AdminToos\scripts\credentials.json
   ```
メモ等で``$HOME\M365AdminToos\scripts\credentials.json``を開き、"your-tenant-id"、"your-client-id"、"your-client-secret" にテナントID、クライアントID,クライアントシークレットを入力します。

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

$Home\M365AdminTools\work を作成し、作業ディレクトリとします。

```
PS> mkdir $HOME\M365AdminTools\work
PS> cd $HOME\M365AdminTools\work
```

### ライセンスの確認

- ``get-m365-license.ps1`` を使用して、テナントで利用できるライセンスを表示します。

   ```
    PS> get-m365-license.ps1
    SkuId                                SkuPartNumber
    -----                                -------------
    e97c048c-XXXX-XXXX-XXXX-922fbf07a370 M365EDU_A5_FACULTY
    46c119d4-XXXX-XXXX-XXXX-97c66d3f909e M365EDU_A5_STUDENT
    ```
- アカウント作成時にライセンスを付与する場合は、SkuId を登録用CSVファイルに記載します。

### 登録されているアカウントの確認

- ``get-m365-users.ps1`` コマンドを使用して、テナントに登録されているアカウント確認します。
   ```
   PS> get-m365-users.ps1
   User list exported to RegisteredUsersList_20240717_055307.csv
   ```
- 標準では ``RegisteredUsersList_YYYYMMDD_HHMMSS.csv`` ファイルが作成されます。
- 出力ファイル名を指定したい場合は、``-Outputfile`` オプションを使用します。
    ```
    PS> get-m365-users.ps1 -Outputfile users.csv
    ```
- 出力されるCSVは

### アカウントを登録する
- アカウント登録用のCSVファイルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/589908a6-2e8b-0bba-9e67-750016fba0bd.png)
- 1行目にはタイトルを入れます。
   ```
   UserPrincipalName,Password,DisplayName,GivenName,SurName,JobTitle,EmployeeId,EmployeeType,Department,City,State,Country,StreetAddress,PostalCode,SkuId1,SkuId2,SkuId3
   ```
- 必須のプロパティは ``UserPrincipalName``、``DisplayName`` です。それ以外は空白でも問題ありません。
- ``Password`` が空白の場合は、12桁のパスワードを自動生成します。
- ``SkuId1～SkuId3`` に ``get-m365-license.ps1z`` で取得した ``SkuId`` を記載します。
- ``add-m365-users.ps1`` コマンドを使用して、アカウントを登録します。
   ```
   PS>  add-m365-users.ps1 -InputFile .\UserRegistration.csv
   Registering users
   User created: stu001@XXXXXXXXXXXXX.onmicrosoft.com
   User created: stu002@XXXXXXXXXXXXX.onmicrosoft.com
   User created: stu003@XXXXXXXXXXXXX.onmicrosoft.com
   User created: stu004@XXXXXXXXXXXXX.onmicrosoft.com
   User created: stu005@XXXXXXXXXXXXX.onmicrosoft.com
   Assigning licenses to users
   Licenses assined to user: stu001@XXXXXXXXXXXXX.onmicrosoft.com
   Licenses assined to user: stu002@XXXXXXXXXXXXX.onmicrosoft.com
   Licenses assined to user: stu003@XXXXXXXXXXXXX.onmicrosoft.com
   Licenses assined to user: stu004@XXXXXXXXXXXXX.onmicrosoft.com
   Licenses assined to user: stu005@XXXXXXXXXXXXX.onmicrosoft.com
   
   User creation details exported to AddedUsersList_20240717_061713.csv with UTF8 BOM encoding
   Completed
   ```
- 標準では ``AddedUsersList_YYYYMMDD_HHMMSS.csv`` ファイルが作成されます。
- 出力ファイル名を指定したい場合は、``-Outputfile`` オプションを使用します。
   ```
   PS> add-m365-users.ps1 -Inputfile <inputfile> -Outputfile <outputfile>
   ```

### アカウントを削除する
- アカウント削除用のCSVファイルを作成します。1行目がタイトル。2行目以降に削除するユーザーのUserPrincipalName を記載します。
   ```:remove-users.csv
   UserPrincipalName
   stu001@XXXXXXXXXXXXX.onmicrosoft.com
   stu002@XXXXXXXXXXXXX.onmicrosoft.com
   stu003@XXXXXXXXXXXXX.onmicrosoft.com
   ```
- ``remove-m365-users.ps1`` コマンドを使用してアカウントを削除します。
   ```
   PS> remove-m365-users.ps1 -InputFile <inputfile>
   Removing users
   User removed: stu001@M365EDU574778.onmicrosoft.com
   User removed: stu002@M365EDU574778.onmicrosoft.com
   User removed: stu003@M365EDU574778.onmicrosoft.com
   User removed: stu004@M365EDU574778.onmicrosoft.com
   User removed: stu005@M365EDU574778.onmicrosoft.com
   
   User deletion details exported to RemovedUsers_20240717_064307.csv
   Completed
   ```
- 標準では ``RemovedUsers_YYYYMMDD_HHMMSS.csv`` ファイルが作成されます。
- 出力ファイル名を指定したい場合は、``-Outputfile`` オプションを使用します。
   ```
   PS> remove-m365-users.ps1 -InputFile <inputfile> -Outputfile <outputfile>
   ```

### 削除済みのアカウントを完全削除する
- ``cleanup-m365-deleated-users.ps1`` コマンドは削除済みのアカウントを完全に削除します。
- ``cleanup-m365-deleated-users.ps1`` コマンドで削除したユーザーは復活させることはできません。
   ```
   PS> cleanup-m365-deleated-users.ps1
   ```

### Temporary Access Pass (TAP) の発行
- TAP を発行するアカウントリストを作成します。1行目がタイトル。2行目以降に削除するユーザーのUserPrincipalName を記載します。
   ```:tap-users.csv
   UserPrincipalName
   stu001@XXXXXXXXXXXXX.onmicrosoft.com
   stu002@XXXXXXXXXXXXX.onmicrosoft.com
   stu003@XXXXXXXXXXXXX.onmicrosoft.com
   ```
- ``create-m365-tap.ps1`` コマンドを使用して、TAP を発行します。
   ```
   PS> create-m365-tap.ps1 -InputFile <inputfile>
   Created user and issued Temporary Access Pass: stu001@M365EDU574778.onmicrosoft.com
   Created user and issued Temporary Access Pass: stu002@M365EDU574778.onmicrosoft.com
   Created user and issued Temporary Access Pass: stu003@M365EDU574778.onmicrosoft.com
   Created user and issued Temporary Access Pass: stu004@M365EDU574778.onmicrosoft.com
   Created user and issued Temporary Access Pass: stu005@M365EDU574778.onmicrosoft.com
   
   User creation details exported to .\UserCreationDetails_20240717_071946.csv with UTF8 BOM encoding
   Completed
   ```
- 標準では ``UserCreationDetails_YYYYMMDD_HHMMSS.csv`` ファイルが作成されます。
- 出力ファイル名を指定したい場合は、``-Outputfile`` オプションを使用します。 

:::note info
#### Temporary Access Pass とは

Temporary Access Pass (TAP) は、Entra ID (おいて、一時的な認証手段として利用できるパスコードです。本書では Windows Hello の設定を行う際に、SMS認証ではなく、TAP を利用して設定を行う方法を紹介します。
:::

[第2章 Microsoft 365 ←](https://qiita.com/hisaho/items/d27ef3a813984359c3f0)　[→第4章 デバイス管理]()