Exchange で PowerShell を使用してすべての SMTP (電子メール) アドレスを取得する

場合によっては、Exchange 組織内の電子メール アドレスの完全なリストをエクスポートすることが必要になる場合があります。この記事では、PowerShell を使用して、割り当てられたすべての SMTP アドレスを取得し、Exchange Server または Microsoft 365 (Exchange Online) の CSV ファイルにエクスポートする方法を説明します。

Exchange 組織に接続します。

  • Exchange 管理シェル (EMS) モジュールを使用してオンプレミスの Exchange Server を管理したり、通常の PowerShell コンソールから Exchange にリモートで接続したりできます。
  • Exchange Online PowerShell モジュール (EXO) を使用して Microsoft 365 テナントに接続します。証明書ベースの認証を使用して、PowerShell 内から Exchange Online にサインインできます。

特定の Exchange メールボックスのすべてのプライマリ SMTP アドレスと追加 SMTP アドレスを表示するには、次のコマンドを実行します。

Get-Mailbox testmax |Select-Object DisplayName,PrimarySmtpAddress,EmailAddresses|fl

  • SMTP大文字のアドレスにはプライマリ電子メール アドレスが含まれます
  • 小文字smtp値はセカンダリ (エイリアス) 電子メール アドレスです。

proxyAddresses 属性は、オンプレミスの Active Directory で電子メール配信アドレスを設定するために使用されます。

ご覧のとおり、ユーザーにはいくつかの追加 SMTP アドレスが割り当てられ、それらは EmailAddresses 文字列属性に保存されます。この属性には他の種類のアドレスが存在する可能性があるため、メールボックスのすべての SMTP アドレスのリストを取得するには、以下のコマンドを実行します。

推奨読書:Exchange 受信コネクタからリモート IP アドレスを削除する

Get-Mailbox testmax | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}

次のコマンドは、Exchange 内のすべてのユーザー メールボックスと共有メールボックスのすべてのプライマリ アドレスとエイリアスを表示し、結果を CSV ファイルにエクスポートします。

Get-Mailbox -ResultSize Unlimited | Select-Object DisplayName,PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }} | Export-Csv "C:PSList-All-SMTP-Addresses.csv" -NoTypeInformation -Encoding UTF8

メールボックスの取得コマンドレットは、ユーザーと共有メールボックスに関する情報のみを表示します。

Active Directory (または Azure AD) には、SMTP アドレスが割り当てられた他の種類のオブジェクト (メールが有効なオブジェクト) が存在する場合があります: 配布グループ、連絡先、Microsoft 365 グループ (Entra ID の統合グループ)。を使用します。受信者の取得Exchange 組織/テナント内のすべてのオブジェクトの SMTP アドレスを一覧表示するコマンドレット:

Get-Recipient -ResultSize Unlimited | Select-Object DisplayName, RecipientType, PrimarySmtpAddress, @{Name="SMTPAliases";Expression={($_.EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object {$_ -replace "smtp:",""}) -join "," }}

この場合、すべての種類の Exchange オブジェクトの SMTP アドレスのリストがあります。特定のオブジェクト タイプの SMTP アドレスのみをエクスポートするには、次のパラメーターを最初のコマンドレットに追加します。

Get-Recipient -ResultSize Unlimited -RecipientType your_object_type | …

考えられる Exchange オブジェクトのタイプ:

  • 動的配布グループ
  • メール連絡先
  • メール非ユニバーサルグループ
  • MailUniversalDistributionGroup
  • MailUniversalSecurityGroup
  • メールユーザー
  • パブリックフォルダー
  • ユーザーメールボックス

同じ (重複した) 受信者 SMTP アドレスを持つ Exchange オブジェクトを検索する必要がある場合は、次のコマンドを実行します。

Get-Recipient -resultsize unlimited | where {$_.EmailAddresses -like "*[email protected]*"}

Exchange で SMTP アドレスのフラット リストを取得することもできます。

Get-Recipient | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" } | ForEach-Object { $_.Replace("smtp:", "").Replace("SMTP:", "") }

Microsoft Teams チャネル用の一意の SMTP アドレスも生成されました。

Exchange 組織内の一意の SMTP アドレスの数を表示します。

Get-Recipient -ResultSize Unlimited | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" }| measure-object

Related Posts