Exchange. Поиск почтовых адресов по доменному имени.

Часто при общении с пользователями возникает задача поиска адреса электронной почты или его части и объекта, которому этот адрес принадлежит. Для решение этой, да и множество других, сегодня приходиться использовать PowerShell. Для себя я определил ряд команд, которые помогают мне в данной конкретной задаче.

Команды нужно запускать в Exchange Management Shell.

# Поиск образца адреса электронной почты в почтовых ящиках, пользователях, контактах и группах рассылки


  • Get-Mailbox | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like '*.ru') { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-MailUser | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like '*.ru') { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-MailContact | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like '*.ru') { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-DistributionGroup | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like '*.ru') { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-DynamicDistributionGroup | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like '*.ru') { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }

#Более простой вариант будет выглядеть так


  • Get-Mailbox | Select EmailAddresses -ExpandProperty EmailAddresses | ? {$_.SmtpAddress -like '*yandex.ru'} | fl SmtpAddress
  • Get-MailContact | Select EmailAddresses -ExpandProperty EmailAddresses | ? {$_.SmtpAddress -like '*yandex.ru'} | fl SmtpAddress
  • Get-MailUser | Select EmailAddresses -ExpandProperty EmailAddresses | ? {$_.SmtpAddress -like '*yandex.ru'} | fl SmtpAddress
  • Get-MailPublicFolder  | Select EmailAddresses -ExpandProperty EmailAddresses | ? {$_.SmtpAddress -like '*yandex.ru'} | fl SmtpAddress
  • Get-DistributionGroup | Select EmailAddresses -ExpandProperty EmailAddresses | ? {$_.SmtpAddress -like '*yandex.ru'} | fl SmtpAddress

# Поиск образца адреса электронной почты в общих почтовых папках


$FindEmail='*';
#$FindEmail='*yandex.ru';
$PFList = Get-PublicFolder -Recurse | ?{ $_.MailEnabled -eq "True" };
foreach ($PF in $PFList) {
                $MPF=Get-MailPublicFolder -Identity $PF;
                [email protected]();
                $addresses='';
                $PFID="\"+$PF.Name.Replace('"','""').Replace('&','`&');
                if ($PF.ParentPath -ne "\") { $PFID=$PF.ParentPath+$PFID };

                foreach ($email in $MPF.EmailAddresses) {
                               if($email.PrefixString -eq 'SMTP' -and $email.SmtpAddress -Like $FindEmail) {$emails+=$email.SmtpAddress }
                };
                if($emails.length -gt 0) {$addresses=$($emails -join ',')};

                if($emails.length -gt 0) {echo $($PFID+"`t"+$addresses)};
}

# Конец скрипта поиск образца адреса электронной почты в общих почтовых папках

# Поиск образца адреса электронной почты в почтовых ящиках, пользователях, контактах и группах рассылки. Команды те же самые, только строка поиска заменена переменной $FindEmail


    $FindEmail $FindEmail='*.pro';
  • Get-Mailbox | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like $FindEmail) { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-MailUser | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like $FindEmail) { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-MailContact | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like $FindEmail) { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-DistributionGroup | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like $FindEmail) { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }
  • Get-DynamicDistributionGroup | foreach { $obj = $_; $obj | Select EmailAddresses -ExpandProperty EmailAddresses | foreach { if ($_.SmtpAddress -like $FindEmail) { echo $( $_.SmtpAddress +"`t"+ $obj.DistinguishedName) } } }