PowerShell で Exchange Online を操作する(2022年10月以降)

過去にこのブログで何度か取り上げてきた「PowerShell で Microsoft 365 を操作する」シリーズですが、2022年10月以降は以前に説明した方法だとエラーとなり、先に進むことができません。

PS C:\> $UserCredential = Get-Credential

PowerShell credential request
Enter your credentials.
User: admin@example.onmicrosoft.com
Password for user admin@example.onmicrosoft.com: *********

PS C:\> $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
New-PSSession: [outlook.office365.com] Connecting to remote server outlook.office365.com failed with the following error message : アクセスが拒否されました。 For more information, see the about_Remote_Troubleshooting Help topic.

これは、2022年10月以降、Exchange Online における基本認証が廃止されたためです(Exchange Online における基本認証の廃止)。リンク先の記事で説明されているように、基本認証の無効化を延期することもできますが、いずれにしても2023年1月以降は例外なく無効化されるため、今から対応しておきましょう。

新しい Exchange Online PowerShell モジュールをインストールする

従来の方法に代えて PowerShell で Exchange Online を操作するためには、ExchangeOnlineManagement モジュールをインストールする必要があります。

Install-Module -Name ExchangeOnlineManagement

Exchange Online に接続する

インストールが終われば、以下のコマンドで Exchange Online に接続することができます。

Connect-ExchangeOnline -UserPrincipalName admin@example.onmicrosoft.com

コマンドを入力し、Enter キーを押すと、ブラウザが開いて認証画面が表示されます。パスワードを入力すると、PowerShell 側で各種コマンドを実行することができるようになります。

パスワードの入力のためにブラウザが開くのが面倒だという場合、InlineCredential パラメータを付けることで PowerShell 上でパスワードを入力することができるようになります。ただし、この方法が使えるのは PowerShell Core(PowerShell 7)のみなので注意してください。また、多要素認証(MFA)を有効にしているアカウントでは機能しません。

Connect-ExchangeOnline -UserPrincipalName admin@example.onmicrosoft.com -InlineCredential