PowerShellでM365を管理するためにMicrosoft Graph モジュールをインストールする

自社の対応案件の中でどうしても必要になってきたので自身の備忘のため・・・
Micorosoft公式のドキュメントを見ればすぐにわかると思いますが、
実際にインストールした時の挙動を備忘としてのこしています。

ほか、気楽に利用できるスクリプトもあるのだと思いますが、
せっかくなので標準で利用できるPowerShellを利用してみようと思い
モジュールをインストールからテナントへ初回ログインまでを実施してみました。

## 参考文献
　https://learn.microsoft.com/ja-jp/microsoft-365/enterprise/connect-to-microsoft-365-powershell?view=o365-worldwide

わかる人はこれだけ見ればわかると思います。ただ、こまごまとしたものが見たくない！
という場合は下記の導入方法からコマンドを実行してみてください。
※エラーが出た場合は公式ドキュメントをまずは見てみてください。

## 導入方法

管理者としてPowerShellを実行する。
![{144873C4-00CF-4BA0-9140-51E5DAC9F245}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1920246/dbcae450-dd27-fad9-66c3-e0234646d184.png)

Graphモジュールをインストールする。
```powershell
Install-Module Microsoft.Graph
```

続行するには NuGet プロバイダーが必要ですと表示された場合は「Y」＋Enterを押して続行
```powershell
続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\user\AppData\Local\PackageManagement\ProviderAssemblies' に配置する必要があります。'Install-PackageProvider
-Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。今すぐ
PowerShellGet で NuGet プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
```
リポジトリについて信頼するか確認が出てくるので、こちらも「Y」＋Enter
```powershell
信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
```

しばらくインストールの表示が出るので待機
```powershell
Installing package 'Microsoft.Graph'                                                                                       Installing dependent package 'Microsoft.Graph.Sites'                                                                    [ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                 ]         Installing package 'Microsoft.Graph.Sites'                                                                                 Downloaded 0.00 MB out of 20.39 MB.                                                                                     [                                                                                                          ]  
```
インストールの表示が消えた後もしばらくプロンプトが返ってこないが、中断しない。Ctrl+Cなどでリセットすると最初からやり直しになる。

コンソールが返ってきたらインストール完了です。

インストールできたかどうかは下記のコマンドでバージョン確認することにより可能です。
```powershell
Get-Module -Name Microsoft.Graph -ListAvailablepowershell
```

実行例は下記の通り
```powershell
PS C:\WINDOWS\system32> Get-Module -Name Microsoft.Graph -ListAvailable


    ディレクトリ: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.25.0     Microsoft.Graph


PS C:\WINDOWS\system32>
```

できたら接続してみましょう！
接続するには下記のコマンドです。
```powershell
PS C:\WINDOWS\system32> Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
```
これを実行すると、ログイン画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1920246/137c67d0-e0f7-8a90-d413-6b2b25dceb00.png)

パスワードを入力し、場合によっては多要素認証を通ると下記の通りアクセス許可の要求が表示されるので「承諾」を押して続行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1920246/b0f20da6-6b9c-5cf7-bf88-bfd35d29e55d.png)

無事にうまくいくと下記の通り表示されるはずです。
```powershell
PS C:\WINDOWS\system32> Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
Welcome to Microsoft Graph!

Connected via delegated access using 14d82eec-204b-4c2f-b7e8-296a70dab67e
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.
```
今ログインしている組織情報を取得するには下記のコマンドを実行してください。
```powershell
 Get-MgOrganization | Format-List
```
下記の通り組織情報が取得できると思います。
```powershell
PS C:\WINDOWS\system32> Get-MgOrganization | Format-List


AssignedPlans                        : {1fe6227d-3e01-46d0-9510-0acad4ff6e94, a312bdeb-1e21-40d0-84b1-0e73f128144f, d8c
                                       638e2-9508-40e3-9877-feb87603837b, c7ce3f26-564d-4d3a-878d-d8ab868c85fe...}
Branding                             : Microsoft.Graph.PowerShell.Models.MicrosoftGraphOrganizationalBranding
BusinessPhones                       : {4000000000
CertificateBasedAuthConfiguration    :
City                                 :
Country                              :
CountryLetterCode                    : SG
CreatedDateTime                      : 2024/01/08 6:31:58
DefaultUsageLocation                 :
DeletedDateTime                      :
DisplayName                          : ※テナントの表示名です。保護のため削除しています※
Extensions                           :
Id                                   : ※テナントのID情報です。保護のため削除しています※
MarketingNotificationEmails          : {}
MobileDeviceManagementAuthority      :
OnPremisesLastSyncDateTime           :
OnPremisesSyncEnabled                :
PartnerTenantType                    :
PostalCode                           :
PreferredLanguage                    : en
PrivacyProfile                       : Microsoft.Graph.PowerShell.Models.MicrosoftGraphPrivacyProfile
ProvisionedPlans                     : {Microsoft.Graph.PowerShell.Models.MicrosoftGraphProvisionedPlan, Microsoft.Grap
                                       h.PowerShell.Models.MicrosoftGraphProvisionedPlan, Microsoft.Graph.PowerShell.Mo
                                       dels.MicrosoftGraphProvisionedPlan, Microsoft.Graph.PowerShell.Models.MicrosoftG
                                       raphProvisionedPlan...}
SecurityComplianceNotificationMails  : {}
SecurityComplianceNotificationPhones : {}
State                                :
Street                               :
TechnicalNotificationMails           : ※技術担当者のメール。保護のため削除しています。
TenantType                           : AAD
VerifiedDomains                      : ※承認されたドメイン。保護のため削除しています。
AdditionalProperties                 : {[directorySizeQuota, System.Collections.Generic.Dictionary`2[System.String,Syst
                                       em.Object]], [onPremisesSyncStatus, System.Object[]]}
```

セッションごとにログインが必要ですが、以降はほかのコマンドを利用してM365の管理情報を取得。更新が可能になります。