こんにちは。サイオステクノロジーの木村です。
今回は、PowerShellにて先進認証を使用して Microsoft365 に接続する方法について記載します。
本記事では、接続に MSOnline (Azure AD v1) モジュール(※) を使用することを前提に記載します。
※MSOnline (Azure AD v1)モジュールについては以下の公式ドキュメントをご参照ください。
Azure Active Directory の PowerShell モジュール
先進認証で Exchange Online へ接続する方法については以下の記事に記載しておりますので併せてご覧ください。
『PowerShell – 先進認証を使用して Exchange Online に接続する –』
『PowerShell – Exchange Onlineに証明書を使用して接続する –』
Microsoft365への先進認証での接続について
Exchange Online へ接続する際は、レガシ認証と先進認証でコマンドレットが異なりますが、 MSOnline (Azure AD v1) モジュール にて Microsoft365 へ接続する場合は、コマンドレットは変わらずレガシ認証の時と同じ「Connect-MsolService」で接続します。
レガシ認証になるか先進認証かの違いは、PowerShell実行環境の MsOnline(Azure AD v1) モジュールのバージョンによって以下のように決まります。
- バージョンが、1.1.166.0 より前の場合 → レガシ認証
- バージョンが、1.1.166.0 以降の場合 → 先進認証
MsOnlineモジュールのバージョン確認方法
PowerShell実行環境にインストールされている MSOnline (Azure AD v1) モジュール のバージョンは以下の手順で確認できます。
1. Windows PowerShell を右クリックして [管理者として実行する] で起動します。
2. Windows PowerShellにて、以下のコマンドレットを実行するとバージョンが表示されます。
Get-InstalledModule -Name MSOnline
<実行例>
3. インストールされているモジュールのバージョンによっては、上記のコマンドレットでは結果が表示されない場合があります。その場合は、以下のコマンドレットで確認します。
cd C:\Windows\System32\WindowsPowerShell\v1.0\Modules\MSOnline
$f = get-item Microsoft.Online.Administration.Automation.PSModule.dll
$f.VersionInfo.FileVersion
<実行例>
MsOnlineモジュールのインストール方法
PowerShell実行環境の MsOnlineモジュール のバージョンが 1.1.166.0 より前であった場合、先進認証で接続するにはバージョンを上げる必要があります。
最新版の MsOnlineモジュール をインストールするには以下のコマンドレットを実行します。
Install-Module -Name MSOnline -AllowClobber -Force
[Net.ServicePointManager]::SecurityProtocol
<実行例>
上記例のように実行結果に「Tls12」が表示されない場合は、以下のコマンドレットによりTLS1.2を指定してください。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
尚、最新版ではなくバージョンを指定してインストールしたい場合、以下のようにバージョンを指定してインストールすることもできます。(バージョンを指定しない場合は、その時点の最新版がインストールされます。)
Install-Module -Name MSOnline -RequiredVersion 1.1.166.0 -AllowClobber -Force
また、インストールしたモジュールは、以下のコマンドレットでアンインストールすることができます。
Uninstall-Module -Name MSOnline
こちらも以下のようにバージョンを指定してアンインストールすることができます。
Uninstall-Module -Name MSOnline -RequiredVersion 1.1.183.57
レガシ認証か?先進認証か?(対話的接続の場合)
MsOnline(Azure AD v1) モジュールのバージョンによってレガシ認証なのか先進認証なのか決まると前述しましたが、実際に接続した際、どちらで接続しているか確認することもできます。
サインインウィンドウを立ち上げ対話的に Microsoft365 へ接続する場合、「Connect-MsolService」コマンドレットを実行した時に立ち上がる認証画面のデザインにて、レガシ認証なのか先進認証なのかわかります。
<対話的接続の場合の実行コマンドレット>
Connect-MsolService
上記コマンドレットを実行するとサインインウィンドウが立ち上がりますが、レガシ認証と先進認証では表示されるサインインウィンドウのデザインが以下のように異なります。そのため、サインインウィンドウによりどちらの接続となるのか確認することができます。
- レガシ認証の場合
- 先進認証の場合
レガシ認証か?先進認証か?(非対話的接続の場合)
スクリプトなどで、認証画面は表示させず非対話的に接続し処理を行いたい場合は、以下のようにコマンドレットを実行することにより、非対話的に接続することができます。
$sec = ConvertTo-SecureString '<管理者のパスワード>' -AsPlainText -force;
$psc = New-Object System.management.Automation.Pscredential('管理者のUPN', $sec);
Connect-MsolService -Credential $psc;
しかし、この場合は、認証画面が表示されないので、レガシ認証で接続されているのか先進認証で接続されているのか認証画面で確認することができません。
その場合の確認方法として、Azure AD のサインインログから確認する方法を記載します。
1. 全体管理者アカウントで、Microsoft 365 管理センター (https://admin.microsoft.com) にサインインします。
2. 左側の [管理センター] – [Azure Active Directory] をクリックします。
3. Azure Active Directory 管理センターにて、画面左側の [Azure Active Directory] をクリックします。
4. [監視] – [サインイン ログ] をクリックします。
5. [ユーザーのサインイン(非対話型)]をクリックします。([ユーザーのサインイン(対話型)]を選択しても同様のログが表示されログが確認できることがあります。)
6. [フィルターの追加] をクリックし、[ユーザー名] にチェックを入れ [適用] をクリックします。
7. [ユーザー名]にスクリプトで接続時に指定したユーザーのUPNを入力し、[適用]をクリックします。
8. [フィルターの追加] をクリックし、[クライアント アプリ] にチェックを入れ [適用] をクリックします。
9. [クライアント アプリ] をクリックし、レガシ認証で接続されたログを表示したい場合は、レガシ認証クライアント配下に表示されているチェックボックス全てにチェックを入れ、[適用]をクリックします。
10. 該当ユーザにて、レガシ認証で接続されたログが表示され、レガシ認証で接続されたことを確認することができます。
11. [クライアント アプリ] をクリックし、先進認証で接続されたログを表示したい場合は、先進認証クライアント配下に表示されているチェックボックスに全てチェックを入れ、[適用]をクリックします。
12. 該当ユーザにて、先進認証で接続されたログが表示され、先進認証で接続されたことを確認することができます。
最後に
先進認証での接続、是非お試しください!