【GraphAPI】Graph PowerShell (1)：インストール (オンライン / オフライン)

# はじめに

Microsoft Graph PowerShell を使用すると、PowerShell コマンドで Graph API を実行することができます。
この記事では Microsoft Graph PowerShell のインストール方法についてまとめました。

※ Graph PowerShell の使い方については、以下の記事で紹介しています。

* 認証方法について

https://qiita.com/atsmin77/items/09162cffd26618c8083f

https://qiita.com/atsmin77/items/6bcc9fb88b305e124399

* Graph API の実行方法について

https://qiita.com/atsmin77/items/933b9a08791aed639d38

# Microsoft Graph PowerShell とは？

"Microsoft Graph PowerShell" とは、PowerShell から Graph API を実行することができるモジュールです。"Graph PowerShell SDK" と表記されることもあります。この記事では "Graph PowerShell" と記載しています。

::: note
名前に "Microsoft" と付いていますが、Microsoft 社の製品ではなく、Github で公開されているオープソースソフトウェア (OSS) です。
:::

::: note warn
Graph PowerShell は OSS のため、公開情報が英語しか用意されてなかったり、不具合等については Github の Issue でコミュニティに質問する必要があります。
:::

(参考：Microsoft Graph PowerShell)
https://github.com/microsoftgraph/msgraph-sdk-powershell


# Graph PowerShell のインストール

Graph PowerShell には以下の 2 つのインストール方法があります。

* オンライン インストール
  インターネットからダウンロードしてインストールする方法
* オフライン インストール
  インターネットへのアクセスが制限されている端末に手動でモジュールのファイルを配置する方法

::: note
Graph PowerShell は以下のバージョンの PowerShell で利用できます。
* Windows PowerShell 5.1 以降
  NET Framework 4.7.2 以降が必要
* PowerShell 7
:::

## オンライン インストール

PowerShell から **Install-Module** コマンドで **"Microsoft.Graph"** モジュールをインストールします。

1. (Windows PowerShell の場合のみ) 管理者権限で Windows PowerShell を開き、以下のコマンドを実行します
   ```powershell
   # リモート署名済みの PowerShell スクリプトの実行を許可します
   Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
   # PowerShellGet モジュールを最新化します
   Install-Module -Name PowerShellGet -Force -AllowClobber
   ```
1. 以下のコマンドを実行します
   ```powershell
   Install-Module Microsoft.Graph -Scope CurrentUser
   ```
1. メッセージが表示されたら "A" と入力して Enter キーを押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/f704cbeb-5253-490c-9249-a7f2e767cdd7.png)
1. インストールが完了するまでしばらく待ちます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/ee5eaa1f-5e4e-48d9-b26f-a87eeb19c2b4.png)

::: note
"Microsoft.Graph" モジュールは "Microsoft.Graph.Users" や "Microsoft.Graph.Teams" といった多数のモジュールで構成されています。
:::

以下のコマンドを実行すると、インストールされたモジュールを確認することができます。

```powershell
Get-InstalledModule "Microsoft.Graph*"
```
```
Version              Name                                Repository           Description
-------              ----                                ----------           -----------
2.28.0               Microsoft.Graph                     PSGallery            Microsoft Graph PowerShell module
2.28.0               Microsoft.Graph.Applications        PSGallery            Microsoft Graph PowerShell Cmdlets
2.28.0               Microsoft.Graph.Authentication      PSGallery            Microsoft Graph PowerShell Authenticatio…
2.28.0               Microsoft.Graph.BackupRestore       PSGallery            Microsoft Graph PowerShell Cmdlets
...
```

(参考：Microsoft Graph PowerShell を使用して Microsoft 365 に接続する)
https://learn.microsoft.com/ja-jp/microsoft-365/enterprise/connect-to-microsoft-365-powershell?view=o365-worldwide

### アンインストール

アンインストールは **"Uninstall-Module"** コマンドで行います。

```powershell
Uninstall-Module -Name "Microsoft.Graph"
Get-InstalledModule -Name "Microsoft.Graph.*" | where {$_.Name -ne "Microsoft.Graph.Authentication"} | Uninstall-Module
Uninstall-Module -Name "Microsoft.Graph.Authentication"
```
::: note warn
モジュールの[依存関係](#モジュールの依存関係の確認方法)のため、上記のコマンドのように順番にモジュールをアンインストールする必要があります。
:::

### ベータ版モジュールについて

Graph API には正式版 ("v1.0") とベータ版 ("beta") の 2 種類があります。ベータ版には一般公開前のプレビュー段階の API が含まれています。
ベータ版の Graph API を使用したい場合には、"Microsoft.Graph.Beta" モジュールをインストールします。

```
Install-Module Microsoft.Graph.Beta -Scope CurrentUser
```

(参考：Microsoft Graph REST API ベータ版のエンドポイント リファレンス)
https://learn.microsoft.com/ja-jp/graph/api/overview?view=graph-rest-beta

## オフライン インストール

インターネットからモジュールをダウンロードできない環境の場合は、必要なモジュールを手動で配置してインストールします。

::: note warn
Install-Module コマンドでは自動的にすべてのモジュールがインストールされますが、オフライン インストールの場合はモジュールごとに手動でダウンロードが必要です。
:::

例えば、ユーザーに関する Graph PowerShell を利用したい場合には、以下のように **"Microsoft.Graph.Authentication"** と **"Microsoft.Graph.Users"** モジュールを配置します。

::: note
**"Microsoft.Graph.Authentication"** は Graph PowerShell を実行するために必ずインストールが必要なモジュールです。
:::

1. インターネットにアクセスできる環境で PowershellGallery から各モジュールのパッケージ (.nupkg) をダウンロードします
[Microsoft.Graph.Authentication](https://www.powershellgallery.com/packages/Microsoft.Graph.Authentication/2.28.0)
[Microsoft.Graph.Users](https://www.powershellgallery.com/packages/Microsoft.Graph.Users/2.28.0) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/4049d4eb-2d95-4ab6-9f80-ae1cddeadee2.png)
1. ダウンロードした ".nupkg" ファイルをのパスを指定して、以下のコマンドを実行します 
   ```
   Unblock-File -Path 'C:\Downloads\microsoft.graph.users.2.28.0.nupkg'
   Unblock-File -Path 'C:\Downloads\microsoft.graph.authentication.2.28.0.nupkg'
   ```
1. ".nupkg" ファイルの拡張子を ".zip" に変更して、展開します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/1cb23b4f-0fb5-4253-a989-820285d214cc.png)
1. 展開した各モジュールのフォルダ内から以下を削除します
   * _rels フォルダ
   * package フォルダ
   * [Content_Types].xml
   * ".nuspec" ファイル   
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/5ba17869-f818-4d5d-aeb1-cf200ad23f82.png)
1. 各モジュールのフォルダ名から末尾のバージョン情報を削除します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/e81d8809-f4a9-4afe-b41a-2a9910f76185.png)
1. Graph PowerShell を実行したい端末へ、各モジュールのフォルダを配置します
   以下のコマンドの実行結果に含まれるパスへ配置します
   ```
   $env:PSModulePath
   ```
   ※ 配置先の例
   * Windows PowerShell の場合
     ```
     C:\Program Files\WindowsPowerShell\Modules
     ```
   * PowerShell 7 の場合の例
     ```
     C:\Program Files\PowerShell\Modules
     ```
1. 以下のコマンドを実行してエラーが表示されないことを確認します
   ```powershell
   Import-Module -Name "Microsoft.Graph.Authentication"
   Import-Module -Name "Microsoft.Graph.Users"
   ```

(参考：Install the Microsoft Graph PowerShell SDK)
https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation?view=graph-powershell-1.0

(参考：パッケージの手動ダウンロード)
https://learn.microsoft.com/ja-jp/powershell/gallery/how-to/working-with-packages/manual-download?view=powershellget-3.x

### アンインストール

アンインストールは配置した各モジュールのフォルダを削除することで行います。

## 補足

### モジュールの依存関係の確認方法

モジュールが依存しているモジュールは PowershellGallery から確認することができます。

::: note
モジュールを利用するためには、そのモジュールが依存しているモジュールも併せてインストールする必要があります。
:::
1. [PowershellGallery](https://www.powershellgallery.com/packages/Microsoft.Graph.Users/2.28.0) で **[Package Details]** をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/b9a2812c-7dad-4b98-b018-b7d5d9731c73.png)
1. 画面をスクロールして **[Dependencies]** にそのモジュールが依存しているモジュールが記載されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/ea1c964b-965e-4933-9a93-8703471fb6b3.png)

"Microsoft.Graph.Authentication" モジュールのように、依存しているモジュールがない場合は "This module has no dependencies" と記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2680397/419c6cad-55c8-40f9-a572-fbab69cc0839.png)