Netwrix 1Secureは、データとアイデンティティ全体にわたる統合された可視性を提供します。14日間の無料トライアルでフルアクセス可能です。無料トライアルを開始

リソースセンターブログ

Exchange Online PowerShell に接続

Exchange Online PowerShell に接続

Aug 25, 2025

Exchange Online PowerShell により、Microsoft 365 のメール環境を安全かつ自動化して管理できます。最新の認証と MFA に対応した EXO V2 モジュールを使用することで、管理者はメールボックス、権限、レポート、移行を大規模に管理できます。証明書ベースおよびマネージド ID のオプションにより自動化を支援し、RBAC、TLS、セッション管理といったベストプラクティスによってセキュリティとコンプライアンスが強化されます。

Exchange Online PowerShell の紹介

Exchange Online PowerShell は、Microsoft 365 の一部である Exchange Online において、タスクを管理し自動化するためのコマンドライン管理インターフェイスです。管理者はこれにより、ユーザーのメールボックスを管理したり、組織の設定を構成したり、スクリプトを通じてバルク処理を効率的に実行できます。Exchange Online の管理に PowerShell を使用する主な利点は次のとおりです:

  • メールボックスの作成や権限の付与などの反復作業を自動化するために、スクリプトを作成します。
  • 複数のユーザー アカウント、メールボックス、またはグループを 1 回の実行で更新/変更するなど、オブジェクトを一括で管理できます。さらに、CSV ファイルを通じてデータのエクスポートやインポートも行えます。
  • サポートされている任意のデバイスから Exchange Online にリモート接続し、暗号化されたセッションを通じて安全に管理タスクを実行できます。
  • 高度なレポート作成と監査を行えます。たとえば、CSV、Excel、または HTML 形式でカスタマイズしたレポートを生成でき、audit mailbox access と管理アクションを正確なフィルターで監査できます。
  • EAC の Web インターフェイスで公開されていない、非表示の高度な設定へのアクセス。

Exchange Online メールボックス監査クイック リファレンス ガイド

詳しくはこちら

Exchange Online PowerShell に接続するための前提条件

Exchange Online PowerShell に接続するには、特定の前提条件を満たす必要があります。

システム要件

  • オペレーティング システム: Windows 10、Windows 11、または Windows Server 2016/2019/2022
  • Windows PowerShell 5.1 以降
  • .NET Framework 4.7.2 以降

ネットワーク要件

  • アウトバウンドの HTTPS(TCP 443)トラフィックが許可されていることを確認してください
  • TLS 1.2 を有効にする必要があります
  • インターネット接続が可能で、outlook.office365.com、login.microsoftonline.com、graph.microsoft.com に接続できること

必須モジュール

  • Exchange Online Management モジュール

認証要件

  • Microsoft Entra ID の場合、そのアカウントには次のような必要な権限が必要です。
  • 全体管理者
  • Exchange 管理者
  • MFA が有効になっているアカウントには、モダン認証のための Exchange Online PowerShell モジュールが必要です

必要な権限

アカウントには、適切な RBAC(Role-Based Access Control)ロールを付与する必要があります:

  • 組織の管理
  • 受信者の管理

Exchange Online PowerShell への接続方法

Exchange Online PowerShell に接続する方法は次のとおりです:

Connect-ExchangeOnline モジュール(最新の方法)

Exchange Online 管理モジュール(Exchange Online Management Module(EXO V2))を使用して、Exchange Online に接続できます。この方法は、日常的な管理および運用タスクに推奨されます。モダン認証(OAuth)と MFA に対応しています。

Azure Cloud Shell(ブラウザー ベースの接続)

この方法により、管理者はローカルへのインストールを行わずに、Azure Portal から直接 Exchange Online PowerShell を使用できます。Exchange Online PowerShell は、ブラウザーがあればどのデバイスからでもアクセスでき、事前にインストールされたモジュールとツールが用意されています。この方法は、ブラウザー経由での管理を好む管理者、またはローカルで PowerShell ツールへのアクセスが限られている管理者に推奨されます。アクセス パスは次のとおりです:Azure Portal > Cloud Shell > PowerShell。

Exchange Online リモート PowerShell(非推奨)

リモート PowerShell(WSMan プロトコル)を使用して Exchange Online PowerShell に接続するこのレガシー方式は非推奨であり、新しい展開には推奨されません。ただし、新しい Exchange Online Management Module をサポートしていないレガシー スクリプトやシステムでは使用できる場合があります。この方式は MFA をサポートしません。

サービス プリンシパル(証明書ベース認証)を使用する

この方式は、サービス プリンシパル アカウントと証明書ベースの認証を通じて、無人またはスクリプト ベースの管理を可能にします。自動化、CI/CD パイプライン、およびバックグラウンド プロセスに推奨されます。前提として、次が必要です:Azure AD アプリ登録と証明書のセットアップ。

接続方式の比較

Method

Best For

Supports MFA

Supports Automation

Connect-ExchangeOnline (EXO V2 Module)

Day-to-day admin tasks

Yes

Yes

Azure Cloud Shell

Quick browser access

Yes

No

Remote PowerShell (WSMan)

Legacy scripts

No

Yes

Service Principal (Certificate Auth)

Automation, CI/CD

No

Yes

モダン認証の仕組みと利点を理解する

モダン認証(Modern authentication)は、OAuth 2.0 と Active Directory Authentication Library(ADAL)または Microsoft Authentication Library(MSAL)を活用して安全なサインインを実現するアイデンティティ管理の方法です。基本認証(basic authentication)などの従来の認証方法に代わるものです。

モダン認証(Modern authentication)は、次の利点があるため、Exchange Online PowerShell に接続するための推奨かつ安全な方法です。

  • 認証情報を直接渡すのではなく、トークンベースの認証に OAuth 2.0 を使用するため、セキュリティが向上します。
  • MFA の利用を可能にし、セキュリティをさらに強化します。
  • 管理者が、デバイスの準拠状況、場所、またはリスク レベルに基づいてポリシーを適用できるため、定義した条件に従って Exchange Online リソースへのアクセスを制限するのに役立ちます。
  • Microsoft Entra ID およびサードパーティの ID プロバイダーとシームレスに統合し、シングルサインオン (SSO) に対応します。

Microsoft は基本認証を非推奨にしているため、最新の認証方式への移行が重要です。

MFA を使用する場合/しない場合の Exchange Online PowerShell への接続要件

MFA を使用する場合/しない場合の Exchange Online PowerShell への接続要件を示します。

Without MFA (Basic Authentication – Deprecated Legacy Method)

Microsoft Entra ID account must not have MFA enabledBasic authentication must still be allowed (if not blocked organization-wide)

With MFA (Modern Authentication)

The Microsoft Entra ID account must have MFA configuredOAuth 2.0 must be supported (default in Exchange Online)

接続の手順ガイド

Exchange Online PowerShell に接続するための簡単な手順は次のとおりです:

  1. Exchange Online PowerShell モジュールをインストールします。
  2. Connect-ExchangeOnline cmdlet を使用して Exchange Online に接続します。プロンプトが表示されたら、Microsoft 365 Exchange の管理者資格情報を入力してください。
  3. Exchange Online 環境に接続すると、Exchange Online PowerShell モジュールで利用できる cmdlet を使って、メールボックス、連絡先、カレンダーなどの Exchange Online の設定やオブジェクトを管理できます。

Exchange Online 管理モジュールをインストールします

Exchange Online Management モジュールは、Windows、Mac、Linux の各システムにインストールできます。管理者として PowerShell を開き、次のコマンドを実行して最新の Exchange Online Management モジュールをインストールしてください:

Install-Module -Name ExchangeOnlineManagement -Force

次の cmdlet を実行して、Exchange Online Management モジュールがインストールされていることを確認してください:

Get-Module -ListAvailable -Name ExchangeOnlineManagement

正しくインストールされていれば、モジュールの詳細が表示されます。

Exchange Online PowerShell モジュールは、Exchange 関連のすべての PowerShell 環境に接続するために、モダン認証を使用します。

モジュールを更新する

既存の Exchange Online Management モジュールを更新するには、次の cmdlet を使用します:

Update-Module ExchangeOnlineManagement

モジュールをインポートする

次の cmdlet を使用して、モジュールを PowerShell セッションに読み込みます:

Import-Module ExchangeOnlineManagement

実行ポリシーの設定

Exchange Online PowerShell に接続するとき、PowerShell に設定されている実行ポリシーによって、スクリプトがシステム上でどのように実行されるかが決まります。 RemoteSigned は、次のことが確実になるため推奨されるポリシーです:

  • ローカルで作成したスクリプトは、デジタル署名を必要とせずに実行できます
  • インターネットからダウンロードしたスクリプトは、信頼できる発行元によって署名されている必要があります

次の cmdlet を使用して、実行ポリシーを RemoteSigned に設定します:

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

基本認証を使用して接続(非推奨)

Microsoft は 2022 年 10 月時点で、Exchange Online に対する基本認証を恒久的に無効化しました。これはモダン認証(OAuth 2.0)に置き換えられています。

最新の認証を使用して接続する

最新の認証(OAuth 2.0)は、Exchange Online PowerShell に接続するための推奨かつ安全な方法です。接続方法は次のとおりです:

Method


Interactive Authentication (GUI Prompt)

This is the default connection method for most tenants, such as standard Microsoft 365 commercial tenants. Use this cmdlet to connect using modern authentication: Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com Replace admin@yourdomain.com with your Exchange Online admin account.A sign-in window will pop up; complete the login process, including multi-factor authentication (MFA) if required.

Device Code Authentication (For Non-GUI Environments)

If you’re working in a non-GUI environment, use the -Device parameter: Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -Device Copy the provided Device Code.Open https://microsoft.com/devicelogin in a browser.Enter the Device Code.Authenticate with your account and complete MFA (if required).

Connect with Certificate-Based Authentication (Non-Interactive)

For automation or unattended scripts: Connect-ExchangeOnline -CertificateThumbprint “<CertificateThumbprint>” -AppId “<AppId>” -Organization “<YourTenant>” Replace: “<CertificateThumbprint>” with your certificate thumbprint”<AppId>” with the Microsoft Entra ID App ID.”<YourTenant>” with your domain (such as yourdomain.onmicrosoft.com).

さまざまな Exchange Online 環境(GCC、GCC High、DoD)向けの接続例

最新の認証を使用する場合、さまざまな Exchange Online 環境では、特定の接続 URI と設定が必要です。これらの環境の例は次のとおりです:

Method

Connection Info

Microsoft 365 GCC (Government Community Cloud)

Use Case: US Government customers (GCC) Connect-ExchangeOnline -UserPrincipalName admin@contoso.onmicrosoft.com Replace admin@contoso.onmicrosoft.com with your Exchange Online admin account.A sign-in window will pop up; complete the login process, including multi-factor authentication (MFA), if required.

Microsoft 365 GCC High

Use Case: US Government customers with high-security requirements Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -ExchangeEnvironmentName O365USGovGCCHigh -ExchangeEnvironmentName – Specifies the GCC High environment explicitly

Microsoft 365 DoD (Department of Defense)

Use Case: Reserved for the US Department of Defense (DoD) tenants Connect-ExchangeOnline -UserPrincipalName admin@yourdomain.com -ExchangeEnvironmentName O365USGovDoD -ExchangeEnvironmentName: Explicitly sets the environment to the Office 365 US Government DoD environment

多要素認証を使用する

MFA を有効にした段階的な接続プロセス

Managed Identities による接続

Managed Identities を使用して Exchange Online PowerShell に接続すると、Microsoft Entra で安全かつパスワード不要の認証を有効にできます。

Managed Identities とは?

Managed Identities により、Microsoft Entra リソースは、資格情報をスクリプトやコードに保存することなく、対応しているサービスに認証できます。Exchange Online は、Azure Automation や同様のシナリオを使った無人のスクリプト実行に対して、この機能をサポートしています。

システム割り当て vs. ユーザー割り当て Managed Identities

Feature

System-Assigned

User-Assigned

Tied to a Resource

Linked to a single Microsoft Entra resource (such as VM, Logic App). It is deleted when the resource is deleted.

Can be shared across multiple resources

Management Scope

Automatically managed for its resource

Managed independently and reusable

Use Case

Suitable for single-resource scenarios

Ideal for shared or multi-resource use

Managed Identities を使用して Exchange Online PowerShell に接続する

前提条件

  • Azure リソース(例: VM、Function App、App Service)で、システム割り当てまたはユーザー割り当ての managed identity が有効になっていることを確認してください。
  • Managed Identity に、Exchange Online に必要な Microsoft Entra ID ロールを割り当てます。たとえば:
  • Exchange 管理者
  • Global Reader または Global Administrator(より広い権限が必要な場合)。
  • Exchange Online PowerShell モジュールをインストールしてインポートします。

接続方法

-ManagedIdentity パラメーター付きの Connect-ExchangeOnline を使用します。

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

Connect-ExchangeOnline -ManagedIdentity -Organization <YourDomain>.onmicrosoft.com

  • ユーザー割り当てのマネージド ID の例:
      # Specify the Client ID of the User-Assigned Managed Identity

Connect-ExchangeOnline -ManagedIdentity -Organization <YourDomain>.onmicrosoft.com -ManagedIdentityAccountId <UserAssignedManagedIdentityClientIdValue>
      

自動化タスクや CI/CD パイプラインなどの無人シナリオの場合:

  • スクリプトは、Azure Automation、Azure DevOps、または Managed Identity を有効にした VM などの安全な場所に保存してください。
  • Managed Identities を使用して認証し、資格情報を明示的に取り扱う必要を避けます。

例のスクリプト:

      # Connect to Exchange Online

Connect-ExchangeOnline -ManagedIdentity

# Example Exchange Online commands

Get-Mailbox -RecipientTypeDetails UserMailbox | Select-Object DisplayName, PrimarySmtpAddress

# Disconnect the session

Disconnect-ExchangeOnline -Confirm:$false
      

詳細は Use Azure managed identities to connect to Exchange Online PowerShell article(Microsoft)をご覧ください。

初心者向け Windows PowerShell スクリプト作成チュートリアル(PDF)

詳しく見る

構文および一般的な接続パラメーター

構文

Connect-ExchangeOnline の cmdlet には、次の構文があります。

Connect-ExchangeOnline

[[-ConnectionUri] <String>]

[[-AzureADAuthorizationEndpointUri] <String>]

[[-ExchangeEnvironmentName] <ExchangeEnvironment>]

[[-PSSessionOption] <PSSessionOption>]

[[-DelegatedOrganization] <String>]

[[-Prefix] <String>]

[[-CommandName] <String[]>]

[[-FormatTypeName] <String[]>]

[-AccessToken <String>]

[-AppId <String>]

[-BypassMailboxAnchoring]

[-Certificate <X509Certificate2>]

[-CertificateFilePath <String>]

[-CertificatePassword <SecureString>]

[-CertificateThumbprint <String>]

[-Credential <PSCredential>]

[-Device]

[-エラーレポートを有効化]

[-インライン資格情報]

[-Cmdlet のヘルプを読み込む]

[-ログ ディレクトリ パス <String>]

[-ログ レベル <LogLevel>]

[-ManagedIdentity]

[-ManagedIdentityAccountId <String>]

[-Organization <String>]

[-PageSize <UInt32>]

[-ShowBanner]

[-ShowProgress <Boolean>]

[-SigningCertificate <X509Certificate2>]

[-SkipLoadingCmdletHelp]

[-SkipLoadingFormatData]

[-TrackPerformance <Boolean>]

[-マルチスレッドを使用 <Boolean>]

[-ユーザー主体名 UserPrincipalName <String>]

[-RPS セッションを使用]

[<共通パラメーター>]

共通パラメーター

基本的なパラメーターは次のとおりです:

Parameter

Description

-UserPrincipalName

Specifies the account that you want to use to connect to Exchange Online PowerShell. This parameter lets you skip entering a username in the modern authentication credentials prompt.

-Credential

Specifies the username and password that is used to connect to Exchange Online PowerShell

-DelegatedOrganization

Specifies the customer organization you want to manage when acting as a delegated admin

-ConnectionUri

Specifies the Exchange Online connection endpoint (used in specialized environments like GCC or China tenants)

-CertificateThumbprint

Connects using a certificate instead of username/password. A valid value is the thumbprint value of the certificate.

-AppId

Used with -CertificateThumbprint to specify a Microsoft Entra ID application ID

-AccessToken

Specifies an OAuth 2.0 access token for authentication

-Organization

Specifies the organization when you connect using CBA or managed identity

いくつかのオプション・パラメーターは次のとおりです:

Parameter

Description

-ShowProgress

Specifies whether to show or hide the progress bar of imported cmdlets when you connect. Valid values are $true and $false.

-SkipLoadingFormatData

Speeds up connections by skipping the loading of formatting and type data files

-InlineCredential

Directly passes credentials in the command line to avoid prompts when connecting to Exchange Online PowerShell

-LogDirectoryPath

Specifies the location of the log file

-LogLevel

Specifies the logging level. Valid values are Default and All.

-ConnectionTimeout

Specifies the timeout value (in seconds) for the connection attempt

-Device

Typically used on computers without web browsers. You don’t need to specify a value with this switch.

-ManagedIdentity

Specifies that you are using managed identity to connect. You do not need to specify a value with this switch.

高セキュリティ環境における接続のための特定パラメーター:

GCC 環境の場合

Parameter

Description

-ConnectionUri

Specifies the endpoint for GCC tenants

-EntraIDAuthorizationEndpointUri

Specifies the authorization endpoint for GCC

-ExchangeEnvironmentName

Specifies the GCC High environment explicitly

DoD 環境の場合

Parameter

Description

-ConnectionUri

Points to the DoD-specific endpoint

-ExchangeEnvironmentName

Explicitly sets the environment to DoD

接続の自動化

無人スクリプトのためのアプリのみ認証

証明書ベース認証(CBA)またはアプリのみ認証は、Microsoft Entra アプリと自己署名証明書を使用することで、無人のスクリプトや自動化シナリオをサポートします。

アプリのみ認証により、サービス、スクリプト、またはバックグラウンド ジョブは、ユーザー操作なしで API やリソースに安全にアクセスできます。スケジュールされたタスク、データ同期、バックエンド処理などの自動化シナリオに最適です。

アプリのみ認証を設定する手順

  1. Go to your identity provider, such as Microsoft Entra ID, and register the app. Then note down the Client ID, Tenant ID, and generate a Client Secret or upload a certificate.
  2. 必要な API 権限を割り当てます。Delegated API permissions(委任 API 権限)ではなく、Application API permissions(アプリケーション API 権限)を付与する必要があります。
  3. 自己署名の X.509 証明書を作成して設定します。アプリのみのアクセス トークン(app-only access token)を要求するときに、この証明書を使用してアプリケーションを Microsoft Entra ID に対して認証します。
  4. 証明書をアプリケーションに登録します。これにより、認証(authentication)のためにプライベート キー(.pfx ファイル)またはサムプリント(thumbprint)を使用できるようになります。
  5. アプリケーションに適切な RBAC ロールを割り当てるには、Microsoft Entra でサポートされている組み込みロールのいずれかを使用します。

これで、「Connect Using Modern Authentication」セクションで提供されている cmdlet を使用して、Exchange Online PowerShell に接続できるようになりました。

詳細については、Microsoft の記事「Exchange Online PowerShell および Security & Compliance PowerShell における無人スクリプトのアプリ専用認証(App-only authentication)」を参照してください。

無人認証のための PowerShell サンプル スクリプト

      $TenantId = “your-tenant-id”

$ClientId = “your-client-id”

$ClientSecret = “your-client-secret”

$Resource = “https://graph.microsoft.com/”

# Get token

$Body = @{

grant_type = “client_credentials”

client_id = $ClientId

client_secret = $ClientSecret

scope = “$Resource/.default”

}

$TokenResponse = Invoke-RestMethod -Uri “https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token” -Method Post -Body $Body

$AccessToken = $TokenResponse.access_token

Write-Output “Access Token: $AccessToken”
      

証明書で接続する

自動化に証明書を使用すると、クライアント シークレットと比べて追加のセキュリティ層が得られます。証明書は、スクリプトやバックグラウンド ジョブでのアプリ専用認証に最適です。機密性の高いシークレットをプレーンテキストとして保存する必要がないためです。

自動化のための証明書の使い方:ステップバイステップガイド

  1. 自己署名証明書を生成します。PowerShell、OpenSSL、または任意の証明書管理ツールを使って生成できます。

PowerShell を使って生成する方法は次のとおりです:

      # Generate a self-signed certificate

$cert = New-SelfSignedCertificate -DnsName “yourapp.domain.com” -CertStoreLocation “Cert:\CurrentUser\My” -KeyExportPolicy Exportable

# Export the certificate and private key as a PFX file

$certPath = “C:\path\to\certificate.pfx”

$certPassword = ConvertTo-SecureString -String “yourpassword” -Force -AsPlainText

Export-PfxCertificate -Cert $cert -FilePath $certPath -Password $certPassword
      
  • Microsoft Entra ID などの ID プロバイダー(identity provider)でアプリケーションを登録します。さらに、証明書の公開鍵もアップロードする必要があります。そのために:
  • アプリの登録(App registration)セクションに移動します。
  • .crt ファイル(公開鍵)を使用してキー資格情報を追加します。
  • アプリ ID とテナント ID をメモしてください。
  • アプリケーションは秘密鍵を使用して、アプリ専用認証用の JWT に署名します。

証明書ベースの接続に関するセキュリティのベストプラクティス

  • 証明書は Azure Key Vault のような安全な場所に保管してください。スクリプト内にパスや鍵をハードコードしないでください。
  • 有効期間が短い証明書を使用してください。期限が切れる前に証明書をローテーション(交換)します。
  • 侵害された、または使用されていない証明書は直ちに失効させます。
  • 最小権限の原則を使用してアプリとそのリソースへのアクセスを制限し、principle of least privilege正確な API スコープを定義します。
  • 監査目的で証明書の使用状況をログに記録します。
  • アプリの認証を監視して、不正なアクセスを検出します。
  • .pfx のような秘密鍵ファイルは暗号化して保護してください。
  • 強力なパスワードで秘密鍵を保護してください。
  • アプリの設定を管理するために MFA を必須にしてください。管理者に対しても MFA を強制する必要がある場合があります。

セッションの管理と切断

Exchange Online PowerShell のセッションを適切に管理し、終了することは、セキュリティを維持し、リソース使用量を最適化し、セッションの枯渇を防ぐうえで非常に重要です。以下はいずれも従うべきベストプラクティスです。

Exchange Online PowerShell セッションを管理するためのベストプラクティス

  • モダン認証とより高いセキュリティのために、Exchange Online Management Module (EXO V2) を使用してください。
  • Exchange Admin や Security Admin のようなロールの例にあるとおり、実行する作業に必要な権限だけを持つアカウントでログインしてください。
  • Exchange Online には最大セッション数の上限があります(ユーザーあたり同時セッション 3 つまで)。この制限に到達しないように、作業完了後はセッションを必ず閉じてください。
  • Exchange Online セッションのデフォルトのタイムアウトに注意してください(通常は非アクティブ 15 分)。アイドル状態のタイムアウトが頻繁に発生する場合は、スクリプトを効率よく最適化してください。
  • 可能であれば、スクリプトは単一のセッション内で実行してください。セッションを長時間アイドル状態のままにしないでください。

Exchange Online の PowerShell セッションを終了するためのベストプラクティス

  • 完了したら必ずセッションを切断してください。切断せずに PowerShell ウィンドウを閉じるだけだと、孤立したセッションが残ることがあります。必ず明示的に切断してください。
  • Remove-PSSession コマンドレットでは、Exchange Online のセッションを完全にクリーンアップできません。常に次を優先してください:

Disconnect-ExchangeOnline -Confirm:$false

  • オーファン セッションがリソースを消費していると疑う場合は、次の方法で終了してください。

Get-PSSession | Remove-PSSession

  • セッションがタイムアウトした場合は、セッションがまだ有効だと決めつけず、明示的に再接続してください。

ユーザーの Exchange Online PowerShell へのアクセスを有効化または無効化する

ユーザーの Exchange Online PowerShell へのアクセスを有効化または無効化するには、Global Administrator または Exchange Administrator ロールなど、十分な管理者権限が必要です。さらに、Organization Management または Recipient Management のロール グループのメンバーであることも必要です。

PowerShell アクセスを無効にしても、ユーザーが Exchange Online PowerShell に接続できるかどうかにのみ影響します。Microsoft 365 Admin Center のような他のサービスへのアクセスには影響しません。

ユーザーのアクセスを無効化する

PowerShell アクセスを無効にすると、ユーザーは自分の資格情報を使って Exchange Online PowerShell に接続できなくなります。アクセスを無効にするための cmdlet は次のとおりです。

Set-User -Identity <UserPrincipalName> -EXOModuleEnabled $false

ユーザーのアクセスを有効化する

PowerShell アクセスを有効にすると、ユーザーは Exchange Online PowerShell に接続できます。アクセスを有効にするための cmdlet は次のとおりです:

Set-User -Identity <UserPrincipalName> -EXOModuleEnabled $true

ユーザーの PowerShell アクセス状態を確認する

ユーザーの PowerShell アクセスが有効か無効かを確認するには、次のコマンドを使用します:

Get-User -Identity “<UserPrincipalName>” | Format-List EXOModuleEnabled

Exchange Online PowerShell へのアクセス権がないすべてのユーザーを取得するには、次の cmdlet を使用します:

Get-User -ResultSize unlimited -Filter ‘RemotePowerShellEnabled -eq $false’

Exchange Online PowerShell へのアクセス権があるすべてのユーザーを取得するには、次の cmdlet を使用します:

Get-User -ResultSize unlimited -Filter ‘RemotePowerShellEnabled -eq $true’

Exchange Online との接続を切断

Exchange Online PowerShell V2(EXO V2)を使用している場合:

Connect-ExchangeOnline cmdlet で接続した場合は、次のコマンドで切断できます:

Disconnect-ExchangeOnline -Confirm:$false

-Confirm パラメーターは任意で、確認プロンプトを抑制するために使用します。既定では、一部の cmdlet は操作を進める前に確認を求める場合があります(例:セッションの切断)。

$false は、確認のプロンプトが表示されないようにしたいことを示します。これにより、「本当に切断してよいか」を確認することなくコマンドが自動的に実行されます。

古い Exchange Online PowerShell モジュールを使用している場合:

古いリモート PowerShell セッションを使用していた場合(例:New-PSSession で接続していた場合)、以下のようにセッションを削除すると切断できます。

Remove-PSSession $Session

この場合、$Session は最初に接続したときに PowerShell セッション オブジェクトを格納した変数です。

よくある接続の問題とトラブルシューティング

Exchange Online PowerShell を使用していると、接続の問題が発生することがあります。これらの問題と解決策を見ていきましょう。

モジュールが未インストール、または古い

次のようなエラーが表示されます。

  • 「Connect-ExchangeOnline」という用語は認識されません。
  • モジュール「ExchangeOnlineManagement」がインストールされていません。

解決策:

Exchange Online Management Module(EXO V2)をインストールし、最新の状態に更新する必要があります。モジュールが正しくインストールされていることを確認するには、この cmdlet を使用してください:

Get-Module -ListAvailable -Name ExchangeOnlineManagement

資格情報の不備または認証の問題

次のような問題が発生する可能性があります:

  • 認証エラーがあります
  • MFA プロンプトが失敗しています

解決策:

  • 正しい資格情報で、最新の認証を使用してください。
  • アカウントが MFA をサポートしており、ブロックされていないことを確認してください。
  • キャッシュされた資格情報をすべてクリアしてください。
  • アカウントに条件付きアクセス ポリシーがある場合は、Exchange Online へのアクセスが許可されていることを確認してください。

セッション上限の枯渇

開いているセッションが多すぎると接続できず、次のエラーが表示されることがあります。

  • 同時セッションの最大数を超えました。

解決策:

  • 古い(期限切れの)セッションを切断します。
  • 各セッションの後、適切に切断していることを確認してください。
  • アクティブなセッションを監視します。

プロキシまたはファイアウォールによって接続がブロックされる

プロキシまたはファイアウォールの制限により接続がハングしたり失敗したりし、次のエラーが表示されます:

  • リモート サーバーに接続できません。

解決策:

  • プロキシ設定が正しく構成されていることを確認してください:
  • ファイアウォールを通過できるように Exchange Online PowerShell のエンドポイントを許可してください:
  • *.outlook.office365.com
  • *.office365.com
  • *.microsoftonline.com
  • 次で接続をテストします:

Test-NetConnection outlook.office365.com -Port 443

古い TLS バージョン

このエラーが発生することがあります:

  • 基盤となる接続がクローズされました:送信中に予期しないエラーが発生しました。

解決策:

  • お使いのシステムが TLS 1.2 をサポートしていることを確認してください。
  • .NET のバージョンを確認してください(4.6.2 以降を推奨します)。

権限がありません

次のようなエラーが表示されます:

  • アクセスが拒否されました。十分な権限がありません。

解決策:

  • アカウントには、Exchange Administrator または適切なロールが割り当てられている必要があります。

PowerShell のバージョンが正しくありません

サポートされていない PowerShell バージョンを使用している場合、互換性エラーが表示されることがあります。

解決策:

  • PowerShell 5.1 以上を使用していることを確認してください:
  • PowerShell Core(7.x)では、EXO V2 Module が互換性があることを確認してください。

アカウントのロックアウトまたは無効化されたアカウント

次のようなエラーが表示されます:

  • アカウントがロックまたは無効化されています。

解決策:

  • Microsoft 365 管理センターでアカウントの状態を確認してください。
  • 必要に応じてアカウントのロックを解除するか、パスワードをリセットしてください。

DNS 解決の問題

次のエラーが表示されます:

  • リモート名を解決できませんでした。

解決策:

  • Exchange Online のエンドポイントの DNS 解決を確認してください。
  • DNS 解決に失敗する場合は、公的な DNS サーバー(例: 8.8.8.8 または 1.1.1.1)を使用してください。

PowerShell モジュール競合に関連するエラー

PowerShell のモジュール競合は、cmdlet が認識されない、機能が重複する、またはバージョンの不一致など、さまざまなエラーの原因になります。

次のようなエラーが表示されることがあります:

  • 「<cmdlet>」という用語は認識されません。
  • Cmdlet は複数のモジュールで利用できます。
  • cmdlet の参照が曖昧です。

解決策:

  • この cmdlet を使用して、現在ロードされているすべてのモジュールとそのバージョンを確認します:

Get-Module -ListAvailable

  • cmdlet が競合を引き起こしている場合、その cmdlet がどのモジュールに属しているかを確認します:

Get-Command <Cmdlet-Name>

  • 必要なモジュールを明示的にインポートし、正しいモジュールのバージョンを強制します:

Import-Module -Name ExchangeOnlineManagement -RequiredVersion 2.x.x -Force

  • 古い、または競合するモジュールが読み込まれている場合は、次を使用して削除してください:

Remove-Module -Name <Module-Name>

  • モジュールの複数のバージョンがインストールされている場合は、次を使用して古いバージョンをアンインストールしてください:

Uninstall-Module -Name ExchangeOnlineManagement -RequiredVersion 1.x.x

REST API 接続エラー

PowerShell で REST API の接続エラーを処理するには、認証、ネットワーク接続、または誤って構成されたリクエストに関連する問題を診断し、対処する必要があります。

Issue

Solution

Authentication Issues Error: Authentication failures or invalid credentials.

Ensure you’re using the correct credentials and modern authentication (OAuth).Verify that your account has sufficient permissions (for example, Exchange Administrator or similar role).Use Secure Application Model or Certificate-based authentication if accessing programmatically.

Endpoint or Module Issues Error: Unable to connect to the required endpoint.

Verify you are using the correct Exchange Online PowerShell V2 module (ExchangeOnlineManagement).Update the module to the latest version:Check the connectivity to the Exchange Online REST endpoint using the following cmdlet. It should resolve and be reachable:
https://outlook.office365.com/powershell-liveid

Network Connectivity Error: Timeouts or connection refused errors.

The required endpoints should not be blocked by firewalls or proxies. These include: *.office365.com *.microsoftonline.com Test internet connectivityIf behind a corporate proxy, ensure the proxy is configured correctly for PowerShell.

Token Expiry Error: Authentication token expiration during the session.

Use Connect-ExchangeOnline with a persistent session, as shown below: Connect-ExchangeOnline -UserPrincipalName <your-admin-email> -ShowProgress $true Refresh your session if the token expires using the following cmdlet: Disconnect-ExchangeOnline Connect-ExchangeOnline

TLS/SSL Protocol Issues Error: TLS errors during connection.

Ensure TLS 1.2 is enabled

Service Outages Error: Service unavailable or intermittent connectivity.

Check the Microsoft 365 Service Health Dashboard for any ongoing issues.

HTTP Errors These errors occur when the server returns an HTTP status code indicating failure. Common Codes: 400 Bad Request: The request is malformed (e.g., invalid JSON or parameters)401 Unauthorized: Invalid or missing authentication credentials403 Forbidden: Access is denied even though authentication is correct404 Not Found: The requested endpoint or resource does not exist500 Internal Server Error: An issue on the API server

Ensure the payload and headers meet the API documentation requirements.Verify API keys, tokens, or other credentials.Ensure your account has access rights to the requested resource.Use logs or a tool like Postman to check raw request/response data.

SSL/TLS Errors Secure connections (HTTPS) may fail due to certificate issues.

Ensure the server’s SSL certificate is valid and trusted.For local testing, you can bypass SSL validation, but avoid this in production.Ensure your client libraries (e.g., Python requests, Node.js https) are up to date to support modern TLS versions.

Timeout Errors These occur when the API server does not respond within the expected timeframe.

Adjust the timeout parameter in your API client to increase timeout settings.Avoid sending excessively large payloads or slow queries.Contact the API provider if timeouts are frequent as there may be server load issues.

Rate-Limiting and Quotas APIs often have usage limits, which can lead to errors when exceeded. Error: HTTP 429 Too Many Requests

Check Rate Limits. Refer to the API documentation for request limits.Implement Throttling to space out requests to comply with the rate limits.Contact the API provider to request higher quotas.

Exchange Online の主要 PowerShell Cmdlet

利用可能なすべての Exchange Online PowerShell cmdlet の一覧を取得するには、次の cmdlet を使用します:

Get-command -Module ExchangeOnlineManagement

Exchange Online の主要な cmdlet について、要点を手早く紹介します。たとえば Get-MailboxGet-EXOMailboxStatistics などを使って、メールボックス、ユーザー、およびその設定を効果的に管理できます。

Get-Mailbox

この cmdlet は、Exchange Online のメールボックスに関する情報を取得します。ユーザーメールボックス、共有メールボックスなど、特定のメールボックスを表示することもできます。

構文

Get-Mailbox [-Identity] <String> [-RecipientTypeDetails <RecipientTypeDetails>] [other parameters]

よくある使用例

  • すべてのメールボックスを取得します:

Get-Mailbox -ResultSize Unlimited

  • すべての共有メールボックスを取得します:

Get-Mailbox -RecipientTypeDetails SharedMailbox

  • ドメインでメールボックスをフィルターします。

Get-Mailbox -Filter “EmailAddress -like ‘*@domain.com'”

Get-EXOMailboxStatistics

この cmdlet は、Exchange Online のメールボックスに関する詳細な統計情報を取得し、メールボックスのサイズ、アイテム数、最終ログオン時刻などの情報を提供します。

構文

Get-EXOMailboxStatistics [-Identity] <String>

よくある使用例

  • ユーザーのメールボックス統計を取得します。:

Get-EXOMailboxStatistics -Identity user@domain.com

  • すべてのメールボックスのサイズを取得します:

Get-EXOMailboxStatistics | Select DisplayName, ItemCount, TotalItemSize

  • 特定のしきい値を超えるサイズのメールボックスを取得します:

Get-EXOMailboxStatistics | Where-Object { $_.TotalItemSize -gt 10GB }

Get-MailboxStatistics

この cmdlet は Get-EXOMailboxStatistics と似ていますが、オンプレミスの Exchange またはハイブリッド環境で動作します。メールボックスのサイズとアイテム数の詳細情報を提供します。

構文

Get-MailboxStatistics [-Identity] <String>

よくある使用例

  • 特定のユーザーの統計を取得します:

Get-MailboxStatistics -Identity “user@domain.com”

  • すべてのメールボックスのサイズと最終ログオン時刻を取得します:

Get-MailboxStatistics | Select DisplayName, LastLogonTime, TotalItemSize

Get-MailboxPermission

この cmdlet は、委任アクセスを含む、メールボックスに割り当てられた権限を取得します。

構文

Get-MailboxPermission [-Identity] <String>

よくある使用例

  • メールボックスのすべてのアクセス許可を表示するには:

Get-MailboxPermission -Identity user@domain.com

  • デフォルト以外のアクセス許可をフィルターするには:

Get-MailboxPermission -Identity “user@domain.com” | Where-Object { $_.IsInherited -eq $false }

Set-Mailbox

この cmdlet は、クォータの制限、転送、機能の有効化などのメールボックス設定を変更します。

構文

Set-Mailbox [-Identity] <String> [-Parameters]

一般的な使用例

  • メールボックスの転送を有効にする:

Set-Mailbox -Identity “user@domain.com” -ForwardingSMTPAddress “forwardto@domain.com” -DeliverToMailboxAndForward $true

  • メールボックスのクォータを変更する:

Set-Mailbox -Identity “user@domain.com” -ProhibitSendQuota 50GB

New-Mailbox

この cmdlet は、Exchange Online 上のユーザーに対して新しいメールボックスを作成します。この cmdlet は、個々のユーザーのメールボックスの作成、共有メールボックスの作成、会議室や備品などのリソース メールボックスの作成といった、さまざまなシナリオで使用できます。

構文

New-Mailbox -Name <Name> -MicrosoftOnlineServicesID <UserPrincipalName> -Password (ConvertTo-SecureString -String “<Password>” -AsPlainText -Force)

よくある使用例

  • ユーザー メールボックスを作成します:

New-Mailbox -Name “John Doe” -MicrosoftOnlineServicesID “johndoe@domain.com” -Password (ConvertTo-SecureString -String “P@ssw0rd!” -AsPlainText -Force)

  • 共有メールボックスを作成します:

New-Mailbox -Shared -Name “Support Team” -MicrosoftOnlineServicesID “support@domain.com”

  • 会議室メールボックスを作成します:

New-Mailbox -Room -Name “Conference Room 1” -MicrosoftOnlineServicesID conference1@domain.com

  • チーム用の共有メールボックスを作成します:

New-Mailbox -Shared -Name “HR Team” -MicrosoftOnlineServicesID “hr@domain.com” -Alias “HRTeam”

Remove-Mailbox

この cmdlet は Exchange Online からメールボックスを削除します。この操作は、ユーザー メールボックス、共有メールボックス、リソース メールボックス(部屋のメールボックスや機器のメールボックスなど)を含むさまざまなメールボックスの種類に適用できます。

構文

Remove-Mailbox -Identity <MailboxIdentity>

よくある使用例

  • ユーザー メールボックスを削除します(メールボックスをソフト削除し、保持期間内で復旧可能にします):

Remove-Mailbox -Identity “johndoe@domain.com”

  • メールボックスを完全に削除します(保持期間を指定せずに削除します):

Remove-Mailbox -Identity “johndoe@domain.com” -Permanent

  • アーカイブ メールボックスのみを削除します(指定したユーザーのプライマリ メールボックスはそのまま残します):

Remove-Mailbox -Identity “johndoe@domain.com” -Archive

Get-MailTrafficSummaryReport

この cmdlet は、組織のメール トラフィックの概要を取得します(Microsoft 365 環境で利用可能)。

構文

Get-MailTrafficSummaryReport [-StartDate] <DateTime> [-EndDate] <DateTime>

よくある使用例

  • 直近 7 日間のメール トラフィックを取得します:
      $StartDate = (Get-Date).AddDays(-7)

$EndDate = Get-Date

Get-MailTrafficSummaryReport -StartDate $StartDate -EndDate $EndDate
      

Search-Mailbox

この cmdlet は、メールボックス内、または複数のメールボックスにわたって特定のコンテンツを検索します。

構文

Search-Mailbox [-Identity] <String> [-SearchQuery <Query>] [-TargetMailbox <String>]

よくある使用例

  • 特定のキーワードを含むメールを検索します:

Search-Mailbox -Identity “user@domain.com” -SearchQuery “Subject:’Invoice'”

  • 検索結果を別のメールボックスにコピーします:

Search-Mailbox -Identity “user@domain.com” -SearchQuery “Keyword” -TargetMailbox “admin@domain.com” -TargetFolder “SearchResults”

Get-MailboxAutoReplyConfiguration

この cmdlet は、メールボックスの自動返信(不在時応答)設定を取得します。

構文

Get-MailboxAutoReplyConfiguration [-Identity] <String>

一般的な使用例

  • 特定のユーザーの自動返信設定を取得します:

Get-MailboxAutoReplyConfiguration -Identity “user@domain.com”

Get-Recipient

この cmdlet は、すべての受信者(メールボックス、グループ、連絡先など)を取得します。

構文

Get-Recipient [-Filter] <String>

よくある使用例

  • すべての受信者を取得します:

Get-Recipient

  • 特定の種類の受信者をフィルターします:

Get-Recipient -RecipientTypeDetails MailUser

Cmdlet フィルター

フィルターを使用して、特定の属性に基づいて結果を絞り込みます。

構文

フィルターは { } で囲み、「プロパティ 演算子 値」の構造を使用します:

-Filter {Property -Operator ‘Value’}

Get-Mailbox -Filter {DisplayName -like “*Test*”}

一般的な演算子

  • -eq: 等しい
  • -ne: 等しくない
  • -like: ワイルドカード一致(* は 0 文字以上の任意の文字列)
  • -notlike: -like を否定します
  • -gt: ~より大きい
  • -lt: ~より小さい

Cmdlet でフィルターを使用する例

  • 特定のドメインのメールボックスを取得する

Get-Mailbox -Filter {EmailAddresses -like ‘*@example.com’}

  • 特定の日付以降に作成されたメールボックスを検索する

Get-Mailbox -Filter {WhenCreated -gt ‘2023-01-01’}

  • 特定の表示名パターンを持つメールボックスを取得する

Get-Mailbox -Filter {DisplayName -like ‘*Test*’}

  • 無効になっているメールボックスを取得する

Get-Mailbox -Filter {AccountDisabled -eq $true}

複数の条件を組み合わせる例

-and や -or のような論理演算子を使って、フィルターを組み合わせることができます。

  • 特定の UPN と表示名を持つユーザーを取得

Get-Mailbox -Filter {UserPrincipalName -like ‘*@example.com’ -and DisplayName -like ‘*John*’}

  • 有効になっているがサイズのしきい値を超えているメールボックスを見つける

Get-Mailbox -Filter {AccountDisabled -eq $false -and ProhibitSendQuota -gt 10GB}

パイプラインによるフィルタリングの例

フィルターは、より高度なフィルタリングのために Where-Object と組み合わせることもできます。

  • カスタム属性でメールボックスをフィルタリング

Get-Mailbox | Where-Object { $_.CustomAttribute1 -eq ‘Value1’ }

  • 過去 30 日間にログインしたアクティブなメールボックスを取得

Get-MailboxStatistics | Where-Object { $_.LastLogonTime -gt (Get-Date).AddDays(-30) }

高度な設定

  • Select-Object を使用して出力を絞り込み、関連するプロパティのみを表示します。

Get-Mailbox | Select-Object DisplayName, PrimarySmtpAddress

  • レポート用に結果を CSV へエクスポートします。

Get-Mailbox | Export-Csv -Path “Mailboxes.csv” -NoTypeInformation

  • デフォルトの上限は 1000 件の結果です。すべての項目を取得するには -ResultSize Unlimited を使用してください。

PowerShell を使用して Exchange Online に移行する

PowerShell を使用して Exchange Online に移行するには、オンプレミス環境の準備、移行エンドポイントの構成、移行プロセスの管理など、いくつかの手順が含まれます。

前提条件

移行を実行する前に、以下を用意していることを確認してください:

  • Exchange Online を含む、有効な Microsoft 365 または Office 365 のサブスクリプション。
  • オンプレミスの Exchange サーバーと Exchange Online の両方に対する管理者の資格情報。
  • Exchange Online PowerShell V2 モジュール(EXO V2)がインストールされていること。
  • ハイブリッド移行を使用する場合は、Exchange Online(Hybrid)設定をセットアップします。

ハイブリッド移行(オンプレミスの Exchange と Exchange Online の両方を利用している組織向け)

ハイブリッド環境では、オンプレミスのメールボックスとクラウドベースのメールボックスの共存を維持しながら、メールボックスを移行できます。

  1. Hybrid Configuration Wizard (HCW) をインストールして構成します。

Hybrid Configuration Wizard (HCW) は、ハイブリッド Exchange 環境を構成するための主要ツールです。オンプレミスの Exchange サーバーが、Exchange Online とハイブリッドで共存できる状態になっていることを確認します。Exchange Admin Center (EAC) からダウンロードして実行できます。

  • オンプレミスの Exchange サーバーを準備します:
  • Get-ExchangeServer コマンドレットを実行して、正しいバージョンが使用されていることを確認します。
  • New-RemoteMailbox コマンドレットを実行して、移行中のユーザーのリモート メールボックスを作成します。
  • New-MigrationBatch コマンドレットを使用して移行バッチを作成し、移行を開始します。:

New-MigrationBatch -Name “MigrationBatch” -SourceEndpoint <OnPremisesExchangeEndpoint> -TargetEndpoint <ExchangeOnlineEndpoint> -MailboxList <MailboxesToMigrate> -AutoStart -AutoComplete

プレースホルダーを置き換えます。:

  • <OnPremisesExchangeEndpoint> — オンプレミスの Exchange サーバーのエンドポイント
  • <ExchangeOnlineEndpoint> – Exchange Online 用のエンドポイント
  • <MailboxesToMigrate> – 移行するメールボックスの一覧
  • 移行プロセスを監視するには:

Get-MigrationBatch | Get-MigrationUser

  • 移行が完了したら、次の方法で完了できます:

Set-MigrationBatch -Identity “MigrationBatch” -Complete

カットオーバー移行(小規模環境向け。通常は 150 個未満のメールボックス)

カットオーバー移行では、すべてのメールボックスをオンプレミスの Exchange から Exchange Online へ 1 回のバッチで移行します。

  1. New-MigrationEndpoint コマンドレットを使用して、オンプレミスの Exchange サーバー用のエンドポイントを作成します:

New-MigrationEndpoint -Name “CutoverEndpoint” -ExchangeServer “<OnPremisesExchangeServer>” -Type “ExchangeRemoteMove”

  • New-MigrationBatch cmdlet を使用して、すべてのメールボックスの移行バッチを作成します:

New-MigrationBatch -Name “CutoverMigrationBatch” -SourceEndpoint “CutoverEndpoint” -MailboxList “user1@example.com”, “user2@example.com” -TargetDeliveryDomain “<ExchangeOnlineDomain>” -AutoStart -AutoComplete

  • Get-MigrationBatch cmdlet を使用して移行を監視します:

Get-MigrationBatch “CutoverMigrationBatch” | Get-MigrationUser

  • 移行が完了したら、Set-MigrationBatch cmdlet を使用して完了させることができます:

Set-MigrationBatch -Identity “CutoverMigrationBatch” -Complete

段階的移行(中規模環境向け)

段階的移行では、メールボックスは本オンプレミスの Exchange から Exchange Online へ、段階的に(通常はバッチ単位で)移行されます。

  1. オンプレミスの Exchange 用のエンドポイントを作成します:

New-MigrationEndpoint -Name “StagedEndpoint” -ExchangeServer “<OnPremisesExchangeServer>” -Type “ExchangeRemoteMove”

  • 段階的にメールボックスを移行するには、New-MigrationBatch コマンドレットを使用して移行バッチを作成します:

New-MigrationBatch -Name “StagedMigrationBatch” -SourceEndpoint “StagedEndpoint” -MailboxList “user1@example.com”, “user2@example.com” -TargetDeliveryDomain “<ExchangeOnlineDomain>” -AutoStart -AutoComplete

  • 次の方法で移行を監視します:

Get-MigrationBatch “StagedMigrationBatch” | Get-MigrationUser

  • 移行が完了したら、次の手順で確定します:

Set-MigrationBatch -Identity “StagedMigrationBatch” -Complete

セキュリティのベストプラクティス

安全な接続を確保する

安全な認証方法を使用する

基本認証の代わりに OAuth を用いた最新の認証を活用してください。さらに、Exchange Online にアクセスするすべてのユーザー アカウントで多要素認証(MFA)を有効にする必要があります。

条件付きアクセス ポリシーを使用する

Microsoft Entra で条件付きアクセスを構成し、場所、デバイスの準拠状況、ユーザーのリスク レベルなどの制限を適用します。未知またはリスクのある場所からのアクセスはブロックまたは制限するようにしてください。

PowerShell アクセスを制限する

ロールベースのアクセス制御(RBAC)を使用して、PowerShell へのアクセスを必要なユーザーのみに制限します。さらなる予防として、管理者アクセスが不要なアカウントではリモート PowerShell を無効にしてください。

TLS 暗号化を強制する

Exchange Online へのすべての接続で TLS 1.2 以上を使用していることを確認してください。また、最新の暗号化プロトコルに準拠していることを確認するために、システムを定期的に監査することも推奨します。

Privileged Access Workstations (PAWs) を使用する

管理業務は安全で隔離されたワークステーションに限定し、マルウェアや攻撃へのさらされを減らしてください。

安全なアプリケーション トークンを使用する

無人で実行するスクリプトでは、ユーザーの資格情報を Microsoft Entra ID の安全なアプリ登録に置き換えてください。

Exchange Online でユーザー権限とアクセス制御を管理する

ロールベースのアクセス制御(RBAC)を導入する

最小権限の原則に基づいて、ユーザーにあらかじめ定義されたロールを割り当てます。Global Administrator のような広範なロールは、本当に必要な場合に限って割り当ててください。

権限を定期的に監視し、見直す

権限を定期的に監査し、不必要なアクセスを削除します。日常的な運用として、Microsoft 365 Security & Compliance Center のレポートを使用してアクセスログを確認してください。

管理者の役割を分離する

管理タスクと日常のユーザー操作には、別々のアカウントを使用してください。さらに、メールボックス管理やコンプライアンス管理のように、管理機能ごとに異なる役割を割り当てるとより効果的です。

Just-in-Time(JIT)アクセスを使用する

Microsoft Entra ID Privileged Identity Management (PIM) を使って JIT アクセス のポリシーを実装し、一時的に権限を昇格できるようにします。

メールボックスの監査を有効化する

すべてのメールボックスで監査を有効にして、変更を追跡し、不正アクセスを検出します。

本番環境で PowerShell を安全に使用するための推奨事項

スクリプトを保護する

資格情報をハードコーディングしないでください。Azure Key Vault や Windows Credential Manager のような安全な保管メカニズムを使用します。また、パラメーター化されたスクリプトと安全な入力処理を行い、インジェクションの脆弱性を回避してください。

PowerShell のアクティビティを監視し、ログを記録する

PowerShell のログ記録(モジュール、スクリプト ブロック、および転写(トランスクリプト)ログ)を有効にします。ログを SIEM システムと統合して、リアルタイム監視を行うこともできます。

署名付きスクリプトを使用する

信頼できる証明書で PowerShell スクリプトに署名し、整合性(インテグリティ)を確保します。これを支えるために、PowerShell の実行ポリシーを AllSigned に設定してください。これは署名付きスクリプトのみを許可するためです。

最小権限で PowerShell を実行する

必要のない限り、昇格した権限を持つアカウントは使用しないでください。代わりに、特定のタスクに必要なきめ細かな権限を使用します。

PowerShell とモジュールを最新の状態に保つ

セキュリティの脆弱性に対処するため、PowerShell を最新バージョンに定期的に更新してください。さらに、Exchange Online Management モジュールを更新して、最新の機能と修正を活用しましょう。

ネットワークアクセスを制限する

ファイアウォール規則または Microsoft Entra ID Named Locations を使用して、Exchange Online のエンドポイントへのアクセスを既知の IP アドレスに限定します。

機密データを暗号化する

SecureString またはその他の暗号化手法を使用して、機密データを安全に保存し、受け渡してください。

Netwrix Auditor for Exchange

まとめ

Exchange Online 向け PowerShell は、管理タスクの管理・自動化に関して強力な機能を提供し、大量のユーザー更新、レポート作成、構成変更などの複雑な操作を管理者が扱えるようにします。OAuth や MFA を含む最新の認証を採用することで、組織は Exchange Online へのアクセスをより安全にできます。PowerShell による自動化は手作業の負担を最小限にし、人為的なミスを減らし、運用の一貫性と拡張性を高めます。

高度な構成やさらに深い学習のために、Microsoft の公式ドキュメント、PowerShell のトレーニングモジュール、コミュニティフォーラムをご覧ください。

Microsoft のドキュメント

  • Exchange Online PowerShell のドキュメント – 接続、メールボックスの管理、コンプライアンス関連の作業などを含む包括的なガイドです。
  • Microsoft Learn – Exchange Online、PowerShell スクリプト作成、セキュリティのベストプラクティスに関する無料のトレーニングモジュールです。

よくある質問

Exchange Online PowerShell に段階的に接続するには?

正しい手順を踏めば、Exchange Online PowerShell への接続は簡単です。まず、次のコマンドを実行して Exchange Online PowerShell モジュールがインストールされていることを確認してください。Install-Module -Name ExchangeOnlineManagement 権限を昇格した PowerShell セッションで実行します。インストール後は、Connect-ExchangeOnline -UserPrincipalName your-admin@domain.com を使って接続を確立します。アカウントで多要素認証が有効になっている場合、認証のためのプロンプトが表示されます。認証が成功したら、次で接続を確認してください。Get-Mailbox -ResultSize 1 基本的な機能が動作することをテストします。作業が終わったら、セキュリティのベストプラクティスを維持するために Disconnect-ExchangeOnline を使って必ず切断してください。

Exchange Online PowerShell へのアクセスが拒否されました—どうすれば直せますか?

「アクセスが拒否されました」というエラーは、通常は権限不足または認証の問題が原因です。まず、アカウントに必要な Exchange Online の管理者ロールが付与されているか確認してください。少なくとも Exchange Administrator か Global Administrator の権限が必要です。ロールが正しい場合は、組織で PowerShell 接続をブロックしてしまう可能性のある Conditional Access ポリシーを使用していないか確認します。次のコマンドでキャッシュされた資格情報を削除し、Remove-StoredCredential から再接続を試してください。問題が解消しない場合は、ExchangeOnlineManagement モジュールの最新版を使用していることを確認してください。古いバージョンでは、最新の認証要件との互換性問題が起こり得ます。

Exchange Online PowerShell に接続できません—よくある解決策は?

接続の失敗は通常、次の3つのカテゴリに分類されます。認証の問題、ネットワークの問題、またはモジュールの競合です。まず、正しい構文を使っているか確認してください。Connect-ExchangeOnline -UserPrincipalName という形式で、非推奨の接続方法ではないことを確認します。ネットワーク接続とファイアウォール設定を確認してください。Exchange Online では特定の Microsoft エンドポイントへのアクセスが必要です。企業プロキシの背後にいる場合は、PowerShell がプロキシ設定を使用するように構成します。古い MSOnline モジュールと新しい ExchangeOnlineManagement モジュールの両方を同時にインストールしていると、モジュールの競合が起きることがあります。レガシーモジュールをアンインストールし、統一された ExchangeOnlineManagement モジュールのみを使用することで、最もクリーンな運用が可能になります。

Exchange Online PowerShell モジュールをインストールする方法は?

Exchange Online PowerShell モジュールのインストールには、コマンドは1つだけで済みますが、前提条件を正しく整えることが重要です。PowerShell を管理者として実行し、次を実行してください。Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber 。-Force パラメーターにより最新バージョンが取得され、-AllowClobber により既存の cmdlet との競合が処理されます。実行ポリシーのエラーが発生した場合は、Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を使って一時的にポリシーを設定してください。実行ポリシーを変更できない環境では、PowerShell Gallery からモジュールを手動でダウンロードし、オフライン方式でインストールします。モジュールが正しくインストールされたことを確認するために、必ずGet-Module ExchangeOnlineManagement -ListAvailable を実行して確認してください。

MFA を使用して Exchange Online PowerShell に接続する方法は?

Exchange Online PowerShell での多要素認証(MFA)は、正しく設定すれば簡単です。最新の Connect-ExchangeOnline cmdlet が MFA を自動で処理します。Connect-ExchangeOnline -UserPrincipalName your-admin@domain.com を実行すると、MFA 完了のためにブラウザー ウィンドウへリダイレクトされます。無人のスクリプトや自動化の場合は、証明書ベースの認証を構成するか、Connect-ExchangeOnline -CertificateThumbprint or Connect-ExchangeOnline -AppId を使用してサービス プリンシパルを設定してください。Microsoft がこれらのレガシー方式を段階的に廃止しているため、基本認証やアプリ パスワードは避けてください。最新の認証は、より安全であるだけでなく、より信頼性が高く、組織の Identity management ポリシーとの連携も向上します。

共有する

もっと詳しく

著者について

Asset Not Found

Jonathan Blackwell

ソフトウェア開発責任者

2012年以降、エンジニアでありイノベーターである Jonathan Blackwell は、エンジニアリングのリーダーシップを通じて Netwrix GroupID を、Active Directory および Azure AD 環境におけるグループとユーザー管理の最前線に押し上げてきました。開発、マーケティング、営業での経験により、Jonathan は Identity 市場と買い手の考え方を深く理解できています。