Microsoft Graph API へ接続するため、Microsoft Graph PowerShell SDK インストール

2021年8月26にMicrosoft365のメッセージセンターにおいて、2022年6月30日で Azure Active Directory Graph のサポートが終了すると公開されました。
これを受けて現在ライセンス管理しているシェルスクリプトが利用できなくなるため、Microsoft Graph PowerShell の導入を検討する必要が出てきました。
本記事は、Microsoft Graph PowerShell の導入について、検証した結果を記載しています。
Microsoft社 の記事やその他の方々の記事を多数、参考にさせていただきました。
Microsoft Graph PowerShell SDK をインストールする
https://docs.microsoft.com/ja-jp/graph/powershell/installation
目次
Windows PowerShellの準備
Windows PowerShell で作業を進めるのでまずは準備をします。
PowerShell を管理者として実行します。

Windows PowerShell のバージョンを確認します。
「$PSVersion」を実行し、結果の中の PSVersion がバージョンとなります。OSバージョンが少し古いとTLS設定や.NET Framework設定が関係してくるかもしれないので確認しました。

PowerShellの実行ポリシーを確認します。
「Get-ExecutionPolicy」を実行すると、現在の実行ポリシーが返されます。
Restricted ですとPowerShell スクリプトを実行できませんので変更が必要です。

必要であれば実行ポリシーを設定します。
実行例:Set-ExecutionPolicy RemoteSigned

【Get-ExecutionPolicy】PowerShellで実行ポリシーを確認する方法
https://cheshire-wara.com/powershell/ps-cmdlets/sequrity/get-executionpolicy/
変更されました。

Windows PowerShell の TLS 設定を確認
私の利用する端末では、「Get-InstalledModule」を実行すると警告が表示されます。

他の方の記事を確認すると PowerShell Gallery へ TLS 1.0 / TLS 1.1 での接続が不可となり、TLS 1.2 が必須となったことが原因のようです。
Microsoft Graph PowerShell SDK をインストールするために PowerShell Gallery へ接続する必要があるのでTLS 1.2 が必要となります。
PowerShell 5.1 環境で PowerCLI のインストールエラーが出た時の対処方法
https://kwmtlog.blogspot.com/2020/05/powershell-51-PowerShellGallery-Error-2.html
まずは、PowerShellで以下を実行し、現在の状態を確認します。
古いバージョンのみ利用しており、TLS 1.2 が表示されてないことがわかります。
ちなみに「System Default」と表示されれば、TLS 1.2 も利用可能のようですので安心してください。
コマンドレット
[Net.ServicePointManager]::SecurityProtocol

TLS1.2 も利用できるよう追加します。コマンドレットは改行されていますが実行する際は、1行のコマンドレットとして実行してください。
コマンドレット
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3, [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls12

TLS1.2 も利用できるようになりました。

「Get-InstalledModule」を実行しても警告は表示されなくなりました。

この設定は、PowerShell を閉じると消えてしまいますので都度、設定が必要となります。
(PowerShell 7 系なら TLS1.2もデフォルトで利用可能かもしれないですが調べておりません・・・)
.NET Framewok のバージョンを確認
今回はここで少しはまりました・・・
Microsoft Graph PowerShell SDK をインストールする の記事を確認すると「4.7.2 .NET Framework 以降のインストール」と書かれています。

.NET Framework のバージョンが古いとMicrosoft Graph PowerShell SDK インストール後、Microsoft Graphへ接続しようとするエラーが出て接続できません。
このエラーだと .NET Framework のバージョンが古いと気付けなかったので少しはまりました。

.NET Framework がどのバージョンであるか確認する方法について、以下URLを参考にしました。
方法: インストールされている .NET Framework バージョンを確認する
https://docs.microsoft.com/ja-jp/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

レジストリエディターで、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full」の「Release」の値を確認します。

参考にしたURLより .NET Framework のバージョンは「4.6.2」ということが判明しました。
ということで .NET Framework のバージョンアップが必要になります。
.NET Framework のバージョンアップ
Microsoft の公開情報から .NET Framework の最新バージョンをダウンロードします。
Windows 10 と Windows Server 2016 以降に .NET Framework をインストールする
https://docs.microsoft.com/ja-jp/dotnet/framework/install/on-windows-10
.NET Framework 4.8 のダウンロード をクリックします。

別ウィンドウが開くので「Download .NET Framework 4.8 Runtime」をクリックしてダウンロードします。

ダウンロードした「ndp48-web.exe」を右クリックして管理者として実行します。

同意して、インストールをクリックします。

Windows PowerShell が起動したままだと「プログラムを自動的に閉じますか?」が表示されるため「はい」をクリックします。
※Windows PowerShell が強制的に閉じられますのでご注意ください

インストールが完了します。
私の環境では再起動は求められませんでした。

再度、レジストリエディターで、「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full」の「Release」の値を確認します。
参考にしたURLより .NET Framework のバージョンは「4.8」へバージョンアップしたことが確認できました。

Microsoft Graph PowerShell SDK インストール
準備が整ったのでMicrosoft Graph PowerShell SDK をインストールします。
環境にもよりますが、最初に NuGet プロバイダー のインストールを求められる場合がありますので、そのまま [Y] はい(Y) を入力してインストールします。
その後、Microsoft Graph PowerShell SDK インストールに進みますので [A] すべて続行(A) を入力して10分ほど待つとインストールが完了します。
コマンドレット
Install-Module Microsoft.Graph

プロンプトが返ってきたら「Get-InstalledModule」を実行してインストールされたモジュールを確認します。

Microsoft Graph API へ接続
私自身 Microsoft Graph API がどういうものかはまだほとんど理解できていません。
そのため以下の方の記事を参考にさせていただきました。
Microsoft Graph PowerShellを利用してユーザーへOffice365ライセンスを付与する
https://blog.iotaker.jp/?p=977
接続の際にはScopesオプションでリソースにアクセスする範囲と権限を指定する必要があるようです。
ユーザーライセンスの管理に必要なスコープは User.ReadWrite.All のみのようですのでとりあえずこれで試してみたいと思います。
コマンドレット
Connect-MgGraph -Scopes "User.Read.All"
認証のためのウィンドウが表示されました。
全体管理者のIDを入力し、次へをクリックします。

パスワードを入力し、サインインをクリックします。

初回のみ「要求されているアクセス許可」が表示されるようです。
チェックを入れて「承諾」をクリックします。
※詳しい内容については、現時点で理解できておりません。検証のためご了承ください。

参考までに「要求されているアクセス許可」は、Azure Portal > Azure Active Directory > エンタープライズアプリケーション > Microsoft Graph PowerShell > アクセス許可 を参照すれば確認できるようです。

本題に戻りまして「Welcome To Microsoft Graph!」と表示され、Microsoft Graph API へ接続できました。

ちなみにですが、PowerShell Gallery は TLS1.2 が必須でしたが、今のところ(2021年10月初旬)Microsoft Graph へ接続する際は、TLS1.2は、必須ではないようです。

コマンドレットを実行してみる
「Get-MgUser」を実行すると登録されているユーザー一覧が表示されます。
※登録されているユーザーが多いテナントの場合、注意してください
コマンドレット
Get-MgUser

まとめ
今回はMicrosoft Graph PowerShell SDK のインストールの検証結果を紹介させていただきました。
ライセンス付与、削除が目的ですのでもう少し検証して確認できれば共有させていただきます。