Вывести все SMTP адреса в Exchange Server/Microsoft 365

Периодически возникает задача выгрузить полный список email адресов в организации Exchange. В этой статье мы покажем, как с получить и экспортировать в CSV файл все назначенные SMTP адреса в Exchange Server или Microsoft 365 (Exchange Online) с помощью PowerShell.

Подключитесь к своей организации Exchange:

Чтобы вывести все основные и дополнительные SMTP алиасы для определенного почтового ящика Exchange, выполните команду:

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

вывести все smtp адреса ящика exchange

Как вы видите, пользователю назначены несколько дополнительных SMTP адресов, которые хранятся в строковом атрибуте EmailAddresses . В этом атрибуте могут находится и другие типы адресов, поэтому чтобы получить список всех SMTP адресов ящика в виде списка, выполните:

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

Следующая команда выведет основные адреса и алиасы для всех ящиков пользователей и общих почтовых ящиков Exchange и экспортируем результаты в CSV файл :

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

Командлет Get-Mailbox выводит информацию только о почтовых ящиках пользователей и общих ящиках.

В Active Directory (или Azure AD) могут быть другие типы объектов, которым назначены SMTP адреса (mail-enabled objects): группы рассылки , контакты, группы Microsoft 365 (Unified Groups в Azure) Для вывода списка SMTP адресов всех объектов в организации/тенанте Exchange используйте командлет Get-Recipient :

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

Экспорт всех почтовых адресов Exchange в CSV файл

В данном случае мы вывели SMTP адреса всех типов объектов. Если вам нужно экспортировать только SMTP адреса определенного типа объектов, добавьте в первый командлет параметр:

Get-Recipient -ResultSize Unlimited -RecipientType типобьекта | …

Возможные типы объектов Exchnage:

  • DynamicDistributionGroup
  • MailContact
  • MailNonUniversalGroup
  • MailUniversalDistributionGroup
  • MailUniversalSecurityGroup
  • MailUser
  • PublicFolder
  • UserMailbox
Если вам нужно найти объекты Exchange с одинаковыми SMTP адресами , выполните:

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

Также можно выгрузить плоский список SMTP адресов в вашем Exchange с помощью команды:

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

Выгрузить список почтовых ящиков в Exchange Online

Вывести количество уникальных SMTP адресов в вашей организации Exchange:

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

количество назначенных почтовых адресов в exchange

EnglishRussianUkrainian