Найти неиспользуемые группы рассылок в Exchange

Найти неиспользуемые группы рассылок в Exchange

Со временем в организации Exchange или тенанте Exchange Online (Microsoft 365) накапливается сотни групп рассылки (Distribution List, DL). Часть из них может не использоваться и их нужно периодически удалять. В этой статье мы покажем, как найти неиспользуемые и пустые группы рассылок в Exchange.

Поиск неиспользуемых групп рассылки отличается от поиска неактивных компьютеров/пользователей в AD. У DL нет атрибута типа
LastLogonDate
/
LastLogonTimeStamp
, позволяющего определить время последнего использования объекта. С помощью журналов отслеживания Exchange вы можете определить, отправились ли письма на указанную группу рассылки или нет.

Поиск пустых групп рассылок в Exchange

Если группа рассылки не содержит пользователей, вероятно она более не нужна. Подключитесь к своему Exchange Server с помощью PowerShell.

Чтобы найти пустые группы рассылки в организации Exchange, используйте такой PowerShell скрипт:

Get-DistributionGroup –ResultSize Unlimited |Where-Object { (Get-DistributionGroupMember –Identity $_.Name –ResultSize Unlimited).Count -eq 0} | select Name, PrimarySmtpAddress

найти пустые группы рассылки exchange с помощью powershell

Проанализируйте полученный список групп рассылки и удалите/скройте ненужные вам DL с помощью команды Remove-DistributionGroup.

Аналогично с помощью Get-DynamicDistributionGroup можно найти пустые динамические группы распространения:

Get-DynamicDistributionGroup -ResultSize Unlimited | Where-Object { (Get-Recipient -RecipientPreviewFilter (Get-DynamicDistributionGroup -Identity $_.Identity).RecipientFilter).count -eq 0} | select Name, PrimarySmtpAddress

Ищем неиспользуемые группы рассылки в Exchange Server

Для анализа транспортных логов в Exchange Server используется командлет Get-MessageTrackingLog. Например, Вы можете посчитать количество писем, отправленных на определенную группу рассылки за последние 90 дней с помощью команды:

Get-MessageTrackingLog -Start (Get-Date).AddDays(-90) -ResultSize unlimited -Recipients "[email protected]"| measure-object

Следующая команда позволяет увеличить срок хранения логов отслеживания писем в Exchange Server до 180 дней:

Set-TransportService HQExch1 -MessageTrackingLogMaxAge 180.00:00:00

Чтобы найти неиспользуемые группы рассылки, можно использовать такой сценарий PowerShell:

  1. Получить список всех группы рассылки в домене и экспортировать его в CSV:
    Get-DistributionGroup | Select-Object PrimarySMTPAddress | Sort-Object PrimarySMTPAddress | Export-CSV all-exchange-dls.csv –notype
  2. Найти список DL, на которые отправлялись письма за последние 30 дней:
    Get-MessageTrackingLog -Start (Get-Date).AddDays(-30) -EventId Expand -ResultSize Unlimited |Sort-Object RelatedRecipientAddress | Group-Object RelatedRecipientAddress |Sort-Object Name | Select-Object @{label=”PrimarySmtpAddress”;expression={$_.Name}}, Count | Export-CSV exchange-active-dls.csv –notype

    Если в организации Exchnaage несколько серверов с транспортной ролью (список можно получить с помощью
    Get-TransportService
    ), нужно выполнить поиск на каждом из них:
    Get-MessageTrackingLog –Server Exh1 ….

  3. Осталось сравнить два списка и найти неактивные группы:
    $alldl = Import-CSV -Path all-exchange-dls.csv
    $activedl = Import-CSV -Path exchange-active-dls.csv
    Compare-Object $alldl $activedl -Property PrimarySmtpAddress -SyncWindow 500 |Sort-Object PrimarySmtpAddress | Select-Object -Property PrimarySmtpAddress |Export-Csv inactive-dls.csv –NoType
  4. Неиспользуемые группы рассылки можно скрыть из адресной книги (the Global Address List):
    $currentdate = Get-Date
    $notes = "Inactive, скрыта из адресной книги $currentdate"
    $inactiveDL = Import-CSV -Path inactive-dls.| foreach-object
    {
    Set-Group -identity $_.PrimarySmtpAddress -notes $notes
    Set-DistributionGroup -identity $_.PrimarySmtpAddress -HiddenFromAddressListsEnabled $true
    }

Найти неиспользуемые Distribution Group в Exchange Online (Microsoft 365)

В Microsoft 365 вы можете выполнять поиск по почтовым логам с помощью Exchange Admin Center (Mail Flow -> Message Trace) или с помощью PowerShell командлетов
Start-HistoricalSearch
и
Get-MessageTrace
. Последний командлет имеет существенное ограничение – он позволяет искать письма только за последние 10 дней и не подходит для нашей задачи.

Установите на свой компьютер модуль Exchange Online PowerShell (EXOv2) и подключитесь к своему тенанту:

Connect-ExchangeOnline

Следующий команда позволит вывести количество писем, отправленных на SMTP адрес определённой группы рассылки:

Start-HistoricalSearch -ReportTitle "DL Name" -StartDate 03/19/2022 -EndDate 05/18/2022 -ReportType MessageTrace -RecipientAddress global_server_admins@ winitpro.ru -NotifyAddress [email protected]

В одном тенанте можно использовать максимум 250 запросов на поиск в истории за 24 часа.

Для запуска поиска неактивных DL среди групп рассылок, можно использовать такой скрипт:

foreach ($group in Get-DistributionGroup)
{
Start-HistoricalSearch -ReportTitle $group.PrimarySmtpAddress -StartDate 03/19/2022 -EndDate 05/18/2022 -ReportType MessageTrace -RecipientAddress $group.PrimarySmtpAddress -NotifyAddress [email protected]
}

После окончания поиска можно проверить сколько писем было отправлено на email DL:

Get-HistoricalSearch "DL Name"

Если список писем пуст (в
Rows = 0
), значит эта группа рассылки не использовалась в Exchange Online в течении последних 90 дней. Такую группу рассылки можно считать неактивной.

найти неиспользуемые группы рассылки в Exchange

Microsoft 365
Найти неиспользуемые группы рассылок в Exchange