Exchange Online PowerShell に接続する

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

Exchange Online PowerShell モジュールでは、Microsoft 365 のすべての Exchange 関連 PowerShell 環境 (Exchange Online PowerShell、Security & Compliance PowerShell、スタンドアロン Exchange Online Protection (EOP) PowerShell) への接続に最新の認証を使用します。 Exchange Online PowerShell モジュールの詳細については、「Exchange Online PowerShell モジュールについて」を参照してください。

自動化のために PowerShell Exchange Onlineに接続するには、「無人スクリプトのアプリ専用認証」および「Azure マネージド ID を使用して PowerShell に接続する」Exchange Online参照してください。

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

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

ヒント

問題が発生する場合 Exchange Online フォーラムに質問してください。

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

注:

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

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

Import-Module ExchangeOnlineManagement

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

注:

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

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

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

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

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

  • EXO V3 モジュール (v3.0.0 以降) と、Exchange Onlineへの基本認証 (リモート PowerShell) 接続の廃止により、REST API コマンドレットのみを使用します。 詳細については、 EXO V3 モジュールの REST API 接続に関するページを参照してください。

  • 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 パラメーターを使用する必要はありません。

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

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

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

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

  • PowerShell 7 でモジュールを使用するには、バージョン 2.0.4 以降が必要です。

次のセクションの接続例では、先進認証を使用します。基本認証を使用することはできません。

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

  1. 次の例は、MFA の有無にかかわらず、Windows PowerShell 5.1 および PowerShell 7 で動作します。

    • この例では、以下の 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 ブラウザーとインターネット にアクセスできるその他のデバイスで、前の手順の <XXXXXXXXX> コード値を開https://microsoft.com/deviceloginいて入力します。

    3. 結果のページに資格情報を入力します。

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

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

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

完全な手順については、「Exchange Online PowerShell と Security & Compliance PowerShell の無人スクリプトのアプリ専用認証」を参照してください。

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

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

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

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

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

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

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

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

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

  • システム割り当てマネージド 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 モジュールと依存関係によって PackageManagement モジュールが必要であるため、インストールせずに接続しようとするとエラーが発生します。 たとえば、次のエラーが表示される場合があります。

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

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

  • 接続後に、次のようなエラーが発生する可能性があります。

    ファイルまたはアセンブリ 'System.IdentityModel.Tokens.Jwt,Version=Version>, Culture=<neutral, PublicKeyToken=<TokenValue>' を読み込めませんでした。 特定のファイルが見つからないか、読み込めませんでした。

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

付録: 古い接続方法と新しい接続方法の比較

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

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

  • 対話型資格情報プロンプトを使用して PowerShell モジュールをExchange Onlineします。

    Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com
    
  • 対話型資格情報プロンプトなしで PowerShell モジュールをExchange Onlineします。

    $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
    

多要素認証で接続する

  • 対話型資格情報プロンプトを使用して PowerShell モジュールをExchange Onlineします。

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

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

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

  • PowerShell モジュールをExchange Onlineします。

    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に接続する

  • PowerShell モジュールをExchange Onlineします。

    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に接続する

  • PowerShell モジュールをExchange Onlineします。

    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
    

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

  • PowerShell モジュールをExchange Onlineします。

    • 証明書の拇印:

      注:

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

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

      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 を使用して接続する

  • PowerShell モジュールをExchange Onlineします。

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

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

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

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

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

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