администрирование,

Получение всех email-enabled объектов из Exchange со всеми адресами

Apr 26, 2023 · 3 мин. на прочтение
Получение всех email-enabled объектов из Exchange со всеми адресами
Поделиться

Возникла необходимость получить список всех email-enabled объектов из Exchange. При этом вывести не только PrimarySmtpAddress, но и дополнительные SMTP адреса.

assets/images/get-all-email-enabled-objects/1.jpg

Для получения всех объектов воспользуемся командлетом Get-Recipient и не забываем указать -ResultSize unlimited, для получения всех результатов.

Get-Recipient -ResultSize unlimited

Затем, при помощи коммандлета Select-Object отберём только те поля, которые нас интересуют. При этом основной SMTP адрес поместим в поле PrimarySmtpAddress, а дополнительные в поле EmailAddresses.

Поле EmailAddresses мы формируем при помощи вычисляемого свойства. Подробнее об этом можно почитать в моей статье Использование вычисляемых свойств Powershell.

Select-Object Name, RecipientType, PrimarySmtpAddress,
    @{Name="EmailAddresses";Expression={
        $_.EmailAddresses |  # Извлекаем адреса электронной почты
        Where-Object {$_.PrefixString -ceq "smtp"} |  # Оставляем только адреса, начинающиеся с "smtp"
        ForEach-Object {$_.SmtpAddress}  # Извлекаем SMTP-адрес каждого адреса электронной почты
    }}

Затем обрабатываем каждого получателя и все адреса в поле EmailAddresses запишем в одну строку, разделенную запятой.

# Обрабатываем каждого получателя и объединяем все адреса электронной почты в одну строку, разделенную запятой
ForEach-Object {
    $_.EmailAddresses = ($_.EmailAddresses -join ", ")
    return $_
}

В конце выводим всё в CSV

Export-Csv "email_enabled_objects.csv" -NoTypeInformation -Encoding UTF8

Полный текст скрипта:

# Получаем всех получателей с неограниченным размером результата
Get-Recipient -ResultSize unlimited |

# Выбираем нужные свойства объекта получателя, а также формируем свойство EmailAddresses
Select-Object Name, RecipientType, PrimarySmtpAddress,
    @{Name="EmailAddresses";Expression={
        $_.EmailAddresses |  # Извлекаем адреса электронной почты
        Where-Object {$_.PrefixString -ceq "smtp"} |  # Оставляем только адреса, начинающиеся с "smtp"
        ForEach-Object {$_.SmtpAddress}  # Извлекаем SMTP-адрес каждого адреса электронной почты
    }} |

# Обрабатываем каждого получателя и объединяем все адреса электронной почты в одну строку, разделенную запятой
ForEach-Object {
    $_.EmailAddresses = ($_.EmailAddresses -join ", ")
    return $_
} |

# Экспортируем результат в CSV-файл
Export-Csv "email_enabled_objects.csv" -NoTypeInformation -Encoding UTF8

В итоге получим желаемую таблицу в CSV

assets/images/get-all-email-enabled-objects/1.jpg

P.S. Если у вас Exchange версии 2013 или 2016, добавьте в начало скрипта следующую строку.

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Это позволит выполнять скрипт в обычной сессии Powershell, а не только в Exchange Management Shell.

Заходите в группу Telegram
Если есть вопросы или хотите пообщаться, то заходите в мою группу Telegram.