Со временем в организации 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
Проанализируйте полученный список групп рассылки и удалите/скройте ненужные вам DL с помощью команды Remove-DistributionGroup.
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
Set-TransportService HQExch1 -MessageTrackingLogMaxAge 180.00:00:00
Чтобы найти неиспользуемые группы рассылки, можно использовать такой сценарий PowerShell:
- Получить список всех группы рассылки в домене и экспортировать его в CSV:
Get-DistributionGroup | Select-Object PrimarySMTPAddress | Sort-Object PrimarySMTPAddress | Export-CSV all-exchange-dls.csv –notype
- Найти список 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 ….
- Осталось сравнить два списка и найти неактивные группы:
$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 - Неиспользуемые группы рассылки можно скрыть из адресной книги (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]
Для запуска поиска неактивных 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 дней. Такую группу рассылки можно считать неактивной.