PowerShell скрипт удаления писем в Exchange от отправителья

Main

Оценка: 98.83% - 6 Голосов

Общая

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

Скрипт выполнять в Exchnage Management Shell

Иногда бывает нужно удалить все письма во всех ящиках от определенного отправителя, например от той или иной системы уведомления, письма от которой пользователи не удаляют.

Создайте отдельного пользователя с почтовым ящиком для запуска скрипта в автоматическом режиме, а так же получения результатов на почту.

Данный скрипт выполняет удаление писем от определенного отправителя и отправляет отчет в виде CSV файла на указанный почтовый ящик.Его можно повесить в планировщик задач:


$file = 'c:\temp\result.csv'  # Путь для файла результата - не забудьте создать папку
$search_range = 90 # Искать письма не старше указанного количества дней
$day_to_stay = 61 # Письма младше указанного количества дней не трогаются
$sender = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.' # Ящик искомого отправителя
$result_recipient = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.' # Ящик получателя отчета
$result_sender = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.' # Ящик отправителя отчета
$smtp_server = '192.168.0.1' # SMTP-серввер для отправки отчета
$email_subject = 'Script workout' # Тема отправляемого письма
$email_body = 'See attachment' # Тело отправляемого письма
$from_date = (Get-Date).AddDays(-$search_range).ToString('dd-MM-yyyy')
$to_date = (Get-Date).AddDays(-$day_to_stay).ToString('dd-MM-yyyy')
del $file
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery "(Received:$from_date..$to_date) AND (From:$sender)" -DeleteContent -Force | Export-CSV -delimiter ";" $file -Encoding UTF8 -NoTypeInfor
Send-MailMessage -SmtpServer $smtp_server -To $result_recipient -From $result_sender -Subject $email_subject -Body $email_body -attachment $file

 

Если вы хотите проверить количество писем то замените строку:


Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery "(Received:$from_date..$to_date) AND (From:$sender)" -DeleteContent -Force | Export-CSV -delimiter ";" $file -Encoding UTF8 -NoTypeInfor

На:


Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery "(Received:$from_date..$to_date) AND (From:$sender)" -Estimate | Export-CSV -delimiter ";" $file -Encoding UTF8 -NoTypeInfor

 

Если необходимо запустить это в планировщике задач.

Пользователь от имени которого выполняется скрипт должен находиться в Exchnagae Administrators.

Приложение для запуска:


C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Аргументы:


-Nologo -NonInteractive -WindowStyle Hidden -NoProfile -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; ". 'Путь до файла'""

Добавить комментарий


Logo