Exchange Online PowerShell に接続する

この記事では、多要素認証 (MFA) の有無にかかわらず、Exchange Online PowerShell モジュールを使用して Exchange Online PowerShell に接続する方法について説明します。

ヒント

この記事の接続手順は、 オンプレミス メールボックスの組み込みセキュリティ アドオンにも適用されます。

Exchange Online PowerShell モジュールは、Exchange Online PowerShell とセキュリティ & コンプライアンス PowerShell への接続に先進認証を使用します。 Exchange Online PowerShell モジュールの詳細については、「Exchange Online PowerShell モジュールについて」を参照してください。

オートメーションのために Exchange Online PowerShell に接続するには、「無人スクリプトのアプリのみの認証」と「Azure マネージド ID を使用して Exchange Online PowerShell に接続する」を参照してください。

C# から Exchange Online PowerShell に接続するには、「C# を使用して Exchange Online PowerShell に接続する」を参照してください。

はじめに把握しておくべき情報

手順 1: Exchange Online PowerShell モジュールを読み込む

注:

モジュールが既にインストールされている場合は、通常、この手順をスキップして、最初にモジュールを手動で読み込まずに Connect-ExchangeOnline を実行できます。

モジュールをインストールしたら、PowerShell ウィンドウを開き、次のコマンドを実行してモジュールを読み込みます。

Import-Module ExchangeOnlineManagement

手順 2:接続して認証する

注:

接続に使用したアカウントのプロファイル パスに特別な PowerShell 文字 ( $ など) が含まれている場合、接続コマンドは失敗する可能性があります。 回避策は、プロファイル パスに特殊文字がない別のアカウントを使用して接続することです。

実行する必要があるコマンドでは、次の構文を使用します。

Connect-ExchangeOnline [-UserPrincipalName <UPN>] [-ExchangeEnvironmentName <Value>] [-ShowBanner:$false] [-LoadCmdletHelp] [-DelegatedOrganization <String>] [-SkipLoadingFormatData] [-DisableWAM]

詳細な構文とパラメーターの詳細については、「Connect-ExchangeOnline」を参照してください。

  • <UPN> は、ユーザー プリンシパル名形式 ( navin@contoso.onmicrosoft.com など) のアカウントです。

  • ExchangeEnvironmentNameパラメーターを使用する場合、ConnectionUri もしくは AzureADAuthorizationEndPointUrlパラメーターを使う必要はありません。 ExchangeEnvironmentName パラメーターの一般的な値を次の表に示します。

    環境
    Microsoft 365 または Microsoft 365 GCC 該当なし*
    Microsoft 365 GCC High O365USGovGCCHigh
    Microsoft 365 DoD O365USGovDoD
    Office 365 Germany O365GermanyCloud
    21Vianet が運用している Office 365 O365China

    * 必須値 O365Default も既定値であるため、Microsoft 365 または Microsoft 365 GCC 環境では ExchangeEnvironmentName パラメーターを使用する必要はありません。

  • バージョン 3.7.0 以降では、Exchange Online PowerShell コマンドレットのコマンド ライン ヘルプは既定で読み込まれなくなりました。 LoadCmdletHelp スイッチを使用すると、Exchange Online PowerShell コマンドレットのヘルプを Get-Help コマンドレットで利用できるようになります。

  • DelegatedOrganization パラメーターは、承認された Microsoft パートナーとして管理する顧客組織を指定します。 詳細については、 この記事で後述する接続例を参照してください。

  • organization の性質によっては、接続コマンドの UserPrincipalName パラメーターを省略できる場合があります。 代わりに、ユーザー名とパスワードを入力するか、Connect-ExchangeOnline コマンドを実行した後に保存されている資格情報を選択します。 機能しない場合は、UserPrincipalName パラメーターを使用する必要があります。

  • MFA を使用していない場合は、多くの場合、UserPrincipalName パラメーターではなく Credential パラメーターを使用できます。 まず、コマンド $Credential = Get-Credentialを実行し、ユーザー名とパスワードを入力し、 Credential パラメーター (-Credential $Credential) に変数名を使用します。 機能しない場合は、UserPrincipalName パラメーターを使用する必要があります。

  • SkipLoadingFormatData スイッチを使用して、Windows サービス内から Exchange Online PowerShell に接続するときのエラーを回避します。

  • PowerShell 7 には、バージョン 2.0.4 以降が必要です。

  • バージョン 3.7.2 以降では、WAM 関連の接続エラーが発生した場合に、 DisableWAM スイッチを使用して Web アカウント マネージャー (WAM) を無効にできます。

次のセクションの接続例では先進認証が使用されますが、基本認証は使用できません。

対話型サインイン プロンプトを使用して Exchange Online PowerShell に接続する

  1. 以下の例は、Windows PowerShell 5.1 および PowerShell 7 で、MFA の有無にかかわらずアカウントで動作します。

    • この例では、以下の Microsoft 365 または Microsoft 365 GCC 組織でExchange Online PowerShell に接続します

      Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com
      
    • この例では、以下の Microsoft GCC High 組織で、Exchange Online PowerShell に接続します

      Connect-ExchangeOnline -UserPrincipalName laura@blueyonderairlines.us -ExchangeEnvironmentName O365USGovGCCHigh
      
    • この例では、以下の Microsoft 365 DoD 組織で、Exchange Online PowerShell に接続します

      Connect-ExchangeOnline -UserPrincipalName julia@adatum.mil -ExchangeEnvironmentName O365USGovDoD
      
    • この例では、以下の Office 365 Germany 組織で、Exchange Online PowerShell に接続します

      Connect-ExchangeOnline -UserPrincipalName lukas@fabrikam.de -ExchangeEnvironmentName O365GermanyCloud
      
  2. 開いたサインイン ウィンドウで、パスワードを入力し、[ サインイン] を選択します。

    [アカウントへのサインイン] ウィンドウでパスワードを入力します。

    注:

    PowerShell 7 では、ブラウザーベースのシングル サインオン (SSO) が既定で使用されるため、サインイン プロンプトはスタンドアロン ダイアログではなく、既定の Web ブラウザーで開きます。

  3. MFA のみ: アカウントに設定されている応答オプション (テキスト メッセージやデバイス上の Microsoft Authenticator アプリなど) に基づいて、確認コードが生成および配信されます。

    開いた確認ウィンドウで、確認コードを入力し、[ 確認] を選択します。

    [アカウントへのサインイン] ウィンドウで確認コードを入力します。

PowerShell 7 の排他的な接続方法

  • MFA を使用しないアカウントの PowerShell 7 では、次の例では PowerShell ウィンドウで資格情報の入力を求められます。

    Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com -InlineCredential
    
  • MFA の有無にかかわらず、PowerShell 7 のアカウントで、この例では別のコンピューターを使用して認証を行い、接続を完了します。 通常、この方法は、Web ブラウザーを搭載していない (ユーザーは PowerShell 7 で資格情報を入力できない) コンピューター上で使用します。

    1. 接続するコンピューターで次のコマンドを実行します。

      Connect-ExchangeOnline -Device
      

      接続コマンドは、次の出力で待機します。

      サインインするには、Web ブラウザーを使用してページ https://microsoft.com/devicelogin を開き、認証のためのコード <XXXXXXXXX> を入力します。

      <XXXXXXXXX> コード値に注意してください。

    2. Web ブラウザーとインターネットにアクセスできる他のデバイスで、 https://microsoft.com/devicelogin を開き、前の手順の <XXXXXXXXX> コード値を入力します。

    3. 表示されるページで資格情報を入力します。

    4. 確認プロンプトで、[ 続行] を選択します。 次のメッセージは成功を示し、ブラウザーまたはタブを閉じることができます。

    5. 手順 1 のコマンドは、引き続き Exchange Online PowerShell に接続します。

サインイン プロンプトなしで Exchange Online PowerShell に接続する (無人スクリプト)

完全な手順については、「Exchange Online PowerShell での無人スクリプトのアプリのみの認証」および「セキュリティ & コンプライアンス PowerShell」を参照してください。

顧客組織の Exchange Online PowerShell に接続する

パートナーと顧客組織の詳細については、次の記事を参照してください。

この例では、次のシナリオで顧客組織に接続します。

  • CSP アカウントを使用して顧客organizationに接続します。

  • GDAP を使用して顧客のorganizationに接続します。

  • ゲストとして顧客organizationに接続します。

    Connect-ExchangeOnline -UserPrincipalName navin@contoso.onmicrosoft.com -DelegatedOrganization adatum.onmicrosoft.com
    

マネージド ID を使用して Exchange Online PowerShell に接続する

詳細については、「Azure マネージド ID を使用して Exchange Online PowerShell に接続する」を参照してください。

  • システム割り当てマネージド ID:

    Connect-ExchangeOnline -ManagedIdentity -Organization "cohovinyard.onmicrosoft.com"
    
  • ユーザー割り当て割り当て済みマネージド ID:

    Connect-ExchangeOnline -ManagedIdentity -Organization "constoso.onmicrosoft.com" -ManagedIdentityAccountId <ManagedIdentityAccountIdGuid>
    

手順 3: 完了したら切断する

終了したら、必ずセッションを切断してください。 セッションを切断せずに PowerShell ウィンドウを閉じると、使用可能なすべてのセッションが使い切られる可能性があり、セッションの有効期限が切れるまで待つ必要があります。 セッションを切断するには、次のコマンドを実行します。

Disconnect-ExchangeOnline

確認プロンプトを表示せずに自動的に切断するには、次のコマンドを実行します。

Disconnect-ExchangeOnline -Confirm:$false

注:

接続に使用したアカウントのプロファイル パスに特別な PowerShell 文字 ( $ など) が含まれている場合、切断コマンドは失敗する可能性があります。 回避策は、プロファイル パスに特殊文字がない別のアカウントを使用して接続することです。

正常に接続したことを確認する方法

何もエラーが表示されなければ、正常に接続されています。 簡単なテストとして、Exchange Online PowerShell コマンドレット (Get-AcceptedDomain など) を実行して、結果を確認します。

エラーが表示された場合は、次の要件を確認します。

  • よく起きる問題はパスワードの入力ミスです。 接続手順を再度実行し、使用するユーザー名とパスワードに十分注意してください。

  • 接続に使用するアカウントで PowerShell へのアクセスを有効にする必要があります。 詳細については、「Exchange Online PowerShell へのアクセスを有効または無効にする」を参照してください。

  • ローカル コンピューターと Microsoft 365 の間に TCP ポート 80 のトラフィックを開く必要があります。 組織で厳格なインターネット アクセス ポリシーが使用されている場合は、開いている可能性がありますが、確認する必要があります。

  • 組織でフェデレーション認証を使用していて、ID プロバイダー (IDP) またはセキュリティ トークン サービス (STS) へのパブリック アクセスができない場合は、フェデレーション アカウントを使用して Exchange Online PowerShell に接続することはできません。 代わりに、Microsoft 365 で非フェデレーション アカウントを作成して使用し、Exchange Online PowerShell に接続します。

  • Exchange Online PowerShell への REST ベースの接続には、PowerShellGet モジュールが必要です。 依存関係によって、PowerShellGet モジュールには PackageManagement モジュールが必要です。 両方のモジュールをインストールせずに接続しようとすると、エラーが発生します。 たとえば、次のエラーが表示されることがあります。

    'Update-ModuleManifest' という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。 名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。

    PowerShellGet および PackageManagement モジュールの要件の詳細については、「 Windows での REST ベースの接続用の PowerShellGet」を参照してください。

  • 接続した後、次のようなエラーが表示されることがあります。

    ファイルまたはアセンブリ 'System.IdentityModel.Tokens.Jwt,Version=<Version>, Culture=neutral, PublicKeyToken=<TokenValue>' を読み込めませんでした。 Could not find or load a specific file. (特定のファイルが見つからないか読み込むことができませんでした。

    このエラーは、Exchange Online PowerShell モジュールが実行空間にインポートされた別のモジュールと競合した場合に発生します。 他のモジュールをインポートする前に、新しい Windows PowerShell ウィンドウで接続してみてください。

付録: 新旧の接続方法の比較

このセクションでは、Exchange Online PowerShell モジュールに置き換えられた以前の接続方法を比較します。 基本認証と OAuth トークンの手順は履歴参照のみに含まれており、サポートされなくなりました。

多要素認証なしで接続する

  • 対話型資格情報プロンプトが表示された Exchange Online PowerShell モジュール:

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com
    
  • 対話型資格情報プロンプトのない Exchange Online PowerShell モジュール:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    Connect-ExchangeOnline -Credential $o365cred
    
  • 基本認証:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/ -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    
  • OAuth トークンを使用した New-PSSession:

    $oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?BasicAuthToOAuthConversion=true -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    

多要素認証を使用して接続する

  • 対話型資格情報プロンプトが表示された Exchange Online PowerShell モジュール:

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com
    
  • 基本認証: 使用できません。

  • OAuth トークンを使用した New-PSSession: 使用できません。

CSP アカウントを使用して顧客organizationに接続する

  • Exchange Online PowerShell モジュール:

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
    
  • 基本認証:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    
  • OAuth トークンを使用した New-PSSession:

    $oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/? DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    

GDAP を使用して顧客organizationに接続する

  • Exchange Online PowerShell モジュール:

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
    
  • 基本認証:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    
  • OAuth トークンを使用した New-PSSession:

    $oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    

ゲストとして顧客organizationに接続する

  • Exchange Online PowerShell モジュール:

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com -DelegatedOrganization delegated.onmicrosoft.com
    
  • 基本認証:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    
  • OAuth トークンを使用した New-PSSession:

    $oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?DelegatedOrg=delegated.onmicrosoft.com&BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@delegated.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    

接続して無人スクリプトを実行する

  • Exchange Online PowerShell モジュール:

    • 証明書の拇印:

      注:

      CertificateThumbprint パラメーターは、Microsoft Windows でのみサポートされます。

      Connect-ExchangeOnline -CertificateThumbPrint "012THISISADEMOTHUMBPRINT" -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
      
    • 証明書オブジェクト:

      Connect-ExchangeOnline -Certificate <%X509Certificate2Object%> -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
      
    • 証明書ファイル:

      Connect-ExchangeOnline -CertificateFilePath "C:\Users\navin\Desktop\automation-cert.pfx" -CertificatePassword (ConvertTo-SecureString -String "<Password>" -AsPlainText -Force) -AppID "36ee4c6c-0812-40a2-b820-b22ebd02bce3" -Organization "contoso.onmicrosoft.com"
      

    詳細については、「Exchange Online PowerShell での無人スクリプトのアプリのみの認証」および「セキュリティ & コンプライアンス PowerShell」を参照してください。

  • 基本認証:

    $secpasswd = ConvertTo-SecureString '<Password>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $secpasswd)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/ -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    
  • OAuth トークンを使用した New-PSSession:

    $oauthTokenAsPassword = ConvertTo-SecureString '<EncodedOAuthToken>' -AsPlainText -Force
    
    $o365cred = New-Object System.Management.Automation.PSCredential ("admin@contoso.onmicrosoft.com", $oauthTokenAsPassword)
    
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/PowerShell-LiveID/?BasicAuthToOAuthConversion=true&email=SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@contoso.onmicrosoft.com -Credential $o365cred -Authentication Basic -AllowRedirection
    
    Import-PSSession $Session
    

マネージド ID を使用して接続する

  • Exchange Online PowerShell モジュール:

    • システム割り当てマネージド ID:

      Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com"
      
    • ユーザー割り当てマネージド ID:

      Connect-ExchangeOnline -ManagedIdentity -Organization "contoso.onmicrosoft.com" -ManagedIdentityAccountId <UserAssignedManagedIdentityPrincipalIdValue>
      

    詳細については、「Azure マネージド ID を使用して Exchange Online PowerShell に接続する」を参照してください。

  • 基本認証: 使用できません。

  • OAuth トークンを使用した New-PSSession: 使用できません。