Периодически возникает задача выгрузить полный список email адресов в организации Exchange. В этой статье мы покажем, как с получить и экспортировать в CSV файл все назначенные SMTP адреса в Exchange Server или Microsoft 365 (Exchange Online) с помощью PowerShell.
Подключитесь к своей организации Exchange:
- Для управления on-prem Exchange Server используется модуль Exchange Management Shell (EMS) или можно удаленно подключиться к Exchange из обычной консоли PowerShell;
- Для подключения к Exchange Online используется модуль Exchange Online PowerShell.
Чтобы вывести все основные и дополнительные SMTP алиасы для определенного почтового ящика Exchange, выполните команду:
Get-Mailbox kbuldogov |Select-Object DisplayName,PrimarySmtpAddress,EmailAddresses|fl
Как вы видите, пользователю назначены несколько дополнительных 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:\PS\All-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 "," }}
В данном случае мы вывели SMTP адреса всех типов объектов. Если вам нужно экспортировать только SMTP адреса определенного типа объектов, добавьте в первый командлет параметр:
Get-Recipient -ResultSize Unlimited -RecipientType типобьекта | …
Возможные типы объектов Exchnage:
- DynamicDistributionGroup
- MailContact
- MailNonUniversalGroup
- MailUniversalDistributionGroup
- MailUniversalSecurityGroup
- MailUser
- PublicFolder
- UserMailbox
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:", "") }
Вывести количество уникальных SMTP адресов в вашей организации Exchange:
Get-Recipient -ResultSize Unlimited | Select-Object -ExpandProperty EmailAddresses | Where-Object { $_ -match "^smtp:" }| measure-object