こんにちは。サイオステクノロジーの木村です。 今後、Exchange Online の基本認証が廃止されます。(但し、2021/06現在、廃止時期は未定。) 基本認証廃止後は、OAuth 2.0 に基づく先進認証での接続が必要になります。 Windows PowerShell にて先進認証で Exchange Online に接続するには、 V2 モジュール または MFA モジュール を使用します。 今回は、 V2 モジュールを用いて、Windows PowerShell にて先進認証で Exchange Online に接続する方法について記載します。
Exchange Online PowerShell V2 モジュールのインストール
先進認証で接続するために、Exchange Online PowerShell V2 モジュールを使用します。 PowerShellを管理者で起動し、以下のコマンドを実行してインストールします。
Install-Module -Name ExchangeOnlineManagement
以下のコマンドを実行してインストールしたモジュールを読み込みます。
Import-Module ExchangeOnlineManagement
※この手順を省略してモジュールを読み込まずに Connect-ExchangeOnline を実行できる場合があります。
Exchange Online にアカウント情報を使用して接続(多要素認証の場合)
多要素認証を使用しているアカウントの情報をもとに、先進認証にて Exchange Onlineに接続する手順は以下になります。
1. PowerShellを起動し、以下のコマンドを実行します。
Connect-ExchangeOnline -UserPrincipalName <接続するアカウント名>
(例)
Connect-ExchangeOnline -UserPrincipalName test@xxxxx.onmicrosoft.com
2. サインイン画面が表示されます。パスワードを入力し「サインイン」をクリックします。 3. 続いて認証画面が表示されます。以降は画面の指示に従って認証情報を入力しサインインを完了させます。 4. 認証情報を正しく入力しサインインすると接続が完了します。「Get-EXOMailbox」などのコマンドを実行すると、実行でき、接続されていることが確認できます。 5. 以下のコマンドを実行すると、接続を切断できます。
Disconnect-ExchangeOnline
Exchange Online にアカウント情報を使用して接続(多要素認証でない場合)
多要素認証を使用していないアカウントの情報をもとに、先進認証にて Exchange Onlineに接続する手順は以下になります。
1. PowerShellを起動し、以下のコマンドを実行します。
$UserCredential = Get-Credential
2. アカウント名とパスワードを入力する画面が表示されます。アカウント名とパスワードを入力し、OKをクリックします。 3. 以下のコマンドを実行します。
Connect-ExchangeOnline -Credential $UserCredential
4. 以上で接続が完了です。「Get-EXOMailbox」などのコマンドを実行すると、実行でき、接続されていることが確認できます。 5. 以下のコマンドを実行すると、接続を切断できます。
Disconnect-ExchangeOnline
Connect-ExchangeOnline -UserPrincipalName <接続するアカウント名>
その場合、上記 2. のアカウント名とパスワードを入力する画面の代わりにパスワードを入力するサインイン画面が表示されます。
Exchange Online にアカウント情報を使用して接続(画面表示なし)
先ほどの方法だと、画面にアカウント名・パスワードを手入力しなければならず、スクリプトなど自動で接続を行うことはできません。 アカウント名・パスワードを入力する画面を表示しないで接続するには、アカウント名とパスワードをもとに PSCredential を作成して -Credential パラメータに指定します。基本認証でのNew-PSSession を使った方法と似ていますが、先進認証で接続します。 ただし、この方法の場合、資格情報をスクリプトやローカルファイル内に記載する必要があるため、スクリプトなどで自動で接続を行う場合は、後述の証明書を使った方法が推奨されています。 また、多要素認証を設定しているアカウントではこの方法で接続できません。
以下のコマンドを実行します。
$o365user = "<アカウント名>"
$password = Get-Content <パスワードファイル> | ConvertTo-SecureString
$Credential = New-Object System.Management.Automation.PSCredential $o365user,$password
Connect-ExchangeOnline -Credential $Credential
接続を切断する際、確認プロンプトや通知テキストなしで切断するには、以下のようにオプションをつけて Disconnect-ExchangeOnline コマンドを実行します。
Disconnect-ExchangeOnline -Confirm:$false -InformationAction Ignore -ErrorAction SilentlyContinue
(例)
#Exchange Online へ接続
$o365user = "test@xxxxx.onmicrosoft.com"
$password = Get-Content C:\temp\user.pass | ConvertTo-SecureString
$Credential = New-Object System.Management.Automation.PSCredential $o365user,$password
Connect-ExchangeOnline -Credential $Credential
$displayName = Get-EXOMailbox -Identity test2@xxxxx.onmicrosoft.com | %{$_.DisplayName}
Write-Output $displayName
#セッション切断
Disconnect-ExchangeOnline -Confirm:$false -InformationAction Ignore -ErrorAction SilentlyContinue
$UserCredential = Get-Credential
$UserCredential.Password | ConvertFrom-SecureString | Set-Content <出力するパスワードファイル名>
Exchange Online に証明書を使用して接続
スクリプトにて自動で接続する場合、こちらの証明書を使用した接続方法が最も推奨されているようです。 証明書を使用した接続方法については、以下の記事をご覧ください。
『PowerShell – Exchange Onlineに証明書を使用して接続する –』
最後に
基本認証で Exchange Online に接続しているという方は、是非先進認証をお試しください! ※2021.09 追記 Connect-ExchangeOnline コマンドを使用した接続ではメモリリークが発生する可能性があるそうです。詳細はこちらの公式ドキュメントに記載があります。 そのため、メモリの消費量を少なくするために、Connect-ExchangeOnline での接続時に、 CommandName パラメーターを使用することが推奨されています。