M365Con 2027 – 無料オンラインカンファレンス · 11–22 Jan 2027 · 120 sessions→ m365con.net

ブログ · Mirko Peters

Exchange Online PowerShellへの接続: ステップごとのガイド

By ·

Connect-ExchangeOnlineでExchange Online PowerShellに接続する方法を解説します。必要な条件、対話型サインイン、MFA、パートナーや無人実行向けのオプション、エラーの対処法を取り上げます。

Automatically translated with AI from the original post. Read the English original

Exchange Online PowerShellに接続するには、ExchangeOnlineManagementモジュールを読み込み、Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.comを実行します。サインインウィンドウが開くので、パスワードを入力し、MFAのプロンプトを承認すると、シェルが接続された状態になります。この記事は、正確な手順、パートナーや無人実行でのアクセスオプション、接続に失敗したときの対処法を知りたいExchangeおよびMicrosoft 365の管理者を対象としています。内容は現在のMicrosoftの公式ドキュメントに沿っており、ここで示すコマンドは最新の認証方式を使い、リモートPowerShellセッションは使用しない前提です。

重要なポイント

  • Exchange Online PowerShellに接続するには、モジュールを読み込み、UPN形式の管理者アカウントを指定してConnect-ExchangeOnlineを実行します。
  • 対話型サインインは、多要素認証の有無にかかわらず利用できます。そのため、MFAを回避するための別の方法は必要ありません。
  • 基本認証と従来のNew-PSSessionメソッドはすでにサポートされていないため、これらに依存しているスクリプトは書き直しが必要です。
  • 接続後の簡単な動作確認にはGet-AcceptedDomainを使い、セッションの終了には必ずDisconnect-ExchangeOnlineを使ってください。
  • 無人実行のスクリプトでは、保存されたパスワードではなく、アプリ専用認証またはマネージドIDを使用してください。

接続する前に必要なもの

接続コマンドはモジュールに含まれているため、先にモジュールをインストールしておく必要があります。まだの場合は、PowerShell Galleryから Install-Module -Name ExchangeOnlineManagement でインストールしてください。Microsoftのドキュメントではこのモジュールを V3 モジュールと呼んでいます。Windows PowerShell 5.1とPowerShell 7の両方に対応しています。PowerShell 7を使う場合は、モジュールのバージョン2.0.4以降が必要です。

接続が成功するかどうかは、ほかに次の4つの要素で決まります。

  • アクセス許可。接続後に実行できるコマンドレットは、ロールベースのアクセス制御によって決まります。難しいのは接続そのものではなく、適切なコマンドレットを実行することです。Microsoftには、コマンドレットに必要なアクセス許可を調べるページがあるので、ブックマークしておくと便利です。
  • アカウントのPowerShellアクセス。アカウントがExchange Online PowerShellを使用できるように設定されている必要があります。管理者がユーザーに対してこの機能を無効にしている場合、サインインは成功しても接続はできません。
  • ネットワーク。お使いのコンピューターとMicrosoft 365の間で、TCPポート80が開放されている必要があります。
  • クリーンなプロファイルパス。Microsoftによると、ユーザープロファイルのパスに $ などのPowerShellの特殊文字が含まれていると、接続コマンドが失敗する場合があります。そのような場合は、別のアカウントを使用してください。

WinRMについて設定を変更する必要はありません。現在の接続は内部でRESTを使用しているため、WinRMで基本認証を有効にするという従来の手順はもう必要ありません。

Exchange Online PowerShellへの接続手順

これは標準的な対話型の方法です。Windows PowerShell 5.1とPowerShell 7のどちらでも同じように動作し、多要素認証の有無も問いません。

  1. 新しい PowerShell ウィンドウを開きます。新しいウィンドウを使うと、同じセッションで以前に読み込んだ他のモジュールとのアセンブリの競合を避けられます。
  2. Import-Module ExchangeOnlineManagement でモジュールを読み込みます。モジュールがすでにインストールされている場合、Microsoft によると通常はこの手順を省略して接続コマンドに直接進めます。PowerShell がモジュールを自動的に読み込むためです。
  3. Connect-ExchangeOnline -UserPrincipalName admin@contoso.com を実行します。ただし、admin@contoso.com の部分は UPN 形式の自分のアカウントに置き換えてください。組織によっては -UserPrincipalName を省略するとプロンプトが表示されます。それでうまくいかない場合は、パラメーターを追加してください。
  4. サインイン ウィンドウにパスワードを入力し、サインイン を選択します。
  5. アカウントで MFA を使用している場合は、確認コードを入力し、確認 を選択します。コードは、設定済みの方法(たとえばテキスト メッセージや Microsoft Authenticator)で届きます。PowerShell 7 では、既定でブラウザーを使用してサインインします。
  6. バナーが表示されるまで待ちます。エラーが表示されなければ接続済みです。

以上です。同じコマンドで、追加のパラメーターを指定しなくても Microsoft 365 GCC 向けの PowerShell セッションに接続できます。他のクラウドの場合のみ設定が必要で、それは次に説明します。

スクリプトのログにウェルカム バナーを表示したくない場合は、-ShowBanner:$false を追加します。Exchange Online コマンドレットのヘルプを Get-Help で表示したい場合は、-LoadCmdletHelp を追加します。モジュール バージョン 3.7.0 以降では、このヘルプは既定では読み込まれなくなりました。そのため、モジュールを更新した後に Get-Help がほとんど何も返さず、戸惑う人が少なくありません。

その他の接続方法: PowerShell 7、パートナー、クラウド

ドキュメントにはいくつかのバリエーションが記載されています。自分の状況に合ったものを選んでください。

ブラウザーを使わない PowerShell 7。 Connect-ExchangeOnline -Device を実行します。コマンドは、https://microsoft.com/devicelogin を開いてコードを入力するよう指示するメッセージを表示します。別のデバイスでそのページを開き、サインインして確認すると、元のセッションの接続が完了します。MFA の有無にかかわらず使用でき、デスクトップ環境のないサーバーや Linux マシンで役立ちます。

インライン資格情報を使用する PowerShell 7。 MFA を使用していないアカウントでは、Connect-ExchangeOnline -UserPrincipalName admin@contoso.com -InlineCredential が使えます。多くの組織では管理者に MFA を必須としているため、この方法を使う機会は少ないでしょう。

資格情報オブジェクトを使用する Windows PowerShell 5.1。 MFA を使用していないアカウントの場合は、まず $Credential = Get-Credential を実行し、次に Connect-ExchangeOnline -Credential $Credential を実行できます。Microsoft は、これが失敗する場合は代わりに -UserPrincipalName を使用するよう注意しています。

パートナーとしての顧客テナント。 Cloud Solution Provider パートナーとゲスト管理者は、-DelegatedOrganization を追加します。例: Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com。アクセス許可の側面については、Microsoft のページで Cloud Solution Provider プログラムと、きめ細かな委任管理者特権 (GDAP) が取り上げられています。

政府機関および地域のクラウド。 -ExchangeEnvironmentName で環境を選択します。既定値は O365Default で、Microsoft 365 と GCC が対象です。ほかの環境で文書化されている値は、O365USGovGCCHigh、O365USGovDoD、O365GermanyCloud、O365China です。

無人実行のスクリプト。スクリプトに管理者のパスワードを保存しないでください。Microsoft は、より安全な方法を 2 つ案内しています。Azure で実行されるスクリプトには、たとえば Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com" のようにマネージド ID を使う方法が適しています。それ以外のスクリプトには、証明書によるアプリ専用認証が適しています。証明書の拇印パラメーターは Windows でのみサポートされます。設定には、Microsoft Entra ID でのアプリの登録、Exchange.ManageAsApp アプリケーションのアクセス許可(管理者の同意付き)、証明書、そしてアプリに割り当てる Exchange 管理者などのサポート対象のロールが必要です。Microsoft は最小特権の原則を推奨しています。回避策がない限り、アプリにグローバル管理者を割り当てないでください。短縮版ではなく、Microsoft の別記事である アプリ専用認証の手順に従ってください。

Windows サービスでは、エラーを避けるために -SkipLoadingFormatData を追加してください。Web アカウント マネージャーに関するエラーが表示される場合は、モジュール バージョン 3.7.2 以降に含まれる -DisableWAM スイッチを使用してください。

スクリプトはシンプルに保つ:インポートするものを制限する

通常の接続では、使用を許可されている Exchange Online コマンドレットがすべてインポートされます。メールボックスを簡単に確認するには便利ですが、3 つのコマンドしか必要ないスクリプトに全部は必要ありません。Microsoft のモジュールのページでは、この点について具体的なヒントが示されています。同じセッションで Connect-ExchangeOnline と Disconnect-ExchangeOnline を頻繁に呼び出すと、メモリ リークが発生する可能性があります。対策は、スクリプトごとに 1 回だけ接続することと、-CommandName パラメーターを使って必要なコマンドレットだけをインポートすることです。

たとえば、メールボックスの統計情報を読み取るだけのスクリプトには、そのコマンド 1 つだけが必要です。使用する少数のコマンドを明示し、冒頭で 1 回接続して処理を行い、末尾で 1 回切断します。この書き方をすると、接続の行を見ただけで、スクリプトがどのコマンドを使うかが分かるため、レビューしやすくなります。

チーム環境では、さらに 2 つの習慣が役立ちます。1 つ目は、接続の行を小さな関数などの 1 か所にまとめておくことです。そうすれば、認証方式を変更するときに 20 本のスクリプトを個別に修正する必要がなくなり、1 回の変更で済みます。2 つ目は、スクリプトを実行したアカウントまたはアプリ名をログに記録することです。シークレットは決して記録しないでください。メールボックスで予期しない変更が起きたとき、このログの 1 行が何時間もの調査を省いてくれます。

接続と切断を確実に行う

エラーなしで接続できれば良い兆候ですが、害のない読み取りコマンドでテストしてください。Get-AcceptedDomain は組織のドメインを一覧表示し、実行に 1 秒ほどしかかかりません。ドメインが表示されれば、セッションは機能しており、アカウントには少なくとも読み取りアクセス権があります。

接続の詳細を確認するには Get-ConnectionInformation を使用します。Microsoft のモジュールのページでは、これらの REST ベースの接続に対して Get-PSSession は有用な情報を返さないと指摘されています。そのため、Get-PSSession で接続を確認している古いスクリプトは修正が必要です。

作業が終わったら Disconnect-ExchangeOnline を実行してください。スクリプトで確認メッセージを省略するには -Confirm:$false を追加します。Microsoft の接続に関する記事では、切断せずにウィンドウを閉じると利用可能なセッションを使い果たし、期限切れまで待つ必要が生じる可能性があると注意しています。

よくある接続エラーの対処法

ほとんどの失敗は、いくつかの典型的な原因に行き着きます。上から順に確認してください。

  • ユーザー名またはパスワードの誤り。手順をやり直し、両方を確認してください。当たり前に聞こえますが、まず UPN の形式を確認してください。
  • アカウントで PowerShell へのアクセスがオフになっている。管理者が有効にできます。Exchange Online PowerShell へのアクセスの有効化と無効化については、Microsoft に別の記事があります。
  • ポート 80 がブロックされている。ネットワーク チームに、Microsoft 365 への TCP ポート 80 を許可するよう依頼してください。
  • フェデレーション アカウントで、ID プロバイダーに到達できない。IDP または STS が一般に公開されていない場合、Microsoft は接続にフェデレーションされていない Microsoft 365 アカウントを使用することを推奨しています。
  • 「'Update-ModuleManifest' という用語は、認識されません」。接続には PowerShellGet と、その依存関係である PackageManagement が必要です。両方を更新し、PowerShell を再起動してください。
  • 「Could not load file or assembly 'System.IdentityModel.Tokens.Jwt'」というエラーです。同じセッション内の別のモジュールと競合しています。ほかのモジュールをインポートする前に、新しい Windows PowerShell ウィンドウで接続してください。
  • サービスまたはスケジュール タスクによって開かれたウィンドウでのエラー。 -SkipLoadingFormatData を試してください。

これらのいずれにも当てはまらない場合は、次に疑うべきはモジュールのバージョンです。インストールしたときと同じスコープで Update-Module -Name ExchangeOnlineManagement を実行し、新しいウィンドウで再度お試しください。

よくある間違い

  • 基本認証または New-PSSession の使用。 Microsoft はこれらを過去の参考情報としてのみ掲載しており、もうサポートされていないと説明しています。このようなセッションを構築しているスクリプトは、Connect-ExchangeOnline に移行する必要があります。
  • 切断せずにウィンドウを閉じること。 セッションが枯渇する原因になることがあります。すべてのスクリプトの最後の行に Disconnect-ExchangeOnline を記述してください。
  • パスワードを平文でスクリプトに記述すること。 代わりにマネージド ID または証明書を使用してください。
  • ほかのモジュールを先にインポートすること。 ほかのモジュールとの競合により、サインインが失敗することがあります。先に Exchange Online に接続するか、新しいウィンドウを使用してください。
  • 接続できれば権限もあると考えること。 接続後にコマンドレットが「認識されません」と表示される場合、そのロールにそのコマンドレットが含まれていません。これは接続の問題ではなく、RBAC の問題です。

関連トピック

  • モジュールのインストールと更新: 接続は適切なモジュールと PowerShell のバージョンに依存するため、チームに展開する前に Exchange Online PowerShell モジュールの要件を確認してください。
  • コマンドレットに必要なアクセス許可の確認: Microsoft は、特定の Exchange コマンドレットに必要なロールを調べる方法を解説しています。
  • Security & Compliance PowerShell への接続: 同じモジュールで Connect-IPPSSession が使用できますが、これは Linux または macOS 上の PowerShell 7 では利用できません。
  • 無人自動化: スケジュールされた Exchange スクリプトを安全に実行するには、アプリのみの認証とマネージド ID を使用します。
  • 大量の一括処理: REST ベースのコマンドレットには 15 分のタイムアウトがあるため、大規模なメンバー更新はバッチに分割してください。

次のステップ

Exchange Online PowerShell に確実に接続するには、まず新しいウィンドウを開き、管理者アカウントで Connect-ExchangeOnline -UserPrincipalName を実行し、Get-AcceptedDomain で動作を確認してから、作業が終わったら切断します。そのうえで、無人スクリプトはマネージド ID または証明書を基に設計し、誰もパスワードを入力したり保存したりしなくて済むようにしてください。

Entities in this article

Exchange Online PowerShell PowerShell

Related articles

RSS