Правила почтового ящика Outlook позволяют пользователям настроить различные условия обработки для входящей почты в папке Inbox. С помощью правил Outlook вы можете переместить письма от конкретных отправителей в нужную папку, переслать письмо другому пользователю и т.д. Пользователи могут создавать и управлять правилами ящика через графический интерфейс Outlook. Администратор Exchange может управлять правилами в ящиках пользователей через PowerShell. В этой статье мы рассмотрим, как создавать, удалять, отключать и изменять правила для входящей почты Outlook в ящиках Exchange Server и Microsoft 365 (Exchange Online) с помощью PowerShell.
Клиентские и серверные правила в Outlook
В ящике Outlook можно настроить два типа правил: клиента (Client-side rules) и на стороне сервера (Server-side rules).
- Серверные правила Outlook (Server-side rules) — выполняются на стороне сервера Exchange при получении письма. При этом не важно, запущен ли Outlook у пользователя или нет. На стороне сервера могут выполняться следующие виды правил: установка флага важности письма, перемещение письма в другую папку ящика, удаление сообщения, пересылка письма в другой ящик. Правила, которые создаются через Outlook Web App всегда выполняются на стороне сервера;
- Клиентские правила (Client-side rules) выполняются только в запущенном клиенте Outlook. Пример таких правил: перемещение письма в PST файл, отметить письмо прочитанным (как проверить, прочитал ли пользователь Exchange письмо), вывести оповещение или воспроизвести звук. Этими правилами нельзя управлять из PowerShell. В интерфейсе Outlook у таких правил указан статус «только клиент».
Когда вы создаете новое правило в Outlook, которое обрабатывается на клиенте, появится предупреждение:
This rule is a client-only rule, and will process only when Outlook is running.
Get-InboxRule: Просмотр правил в ящике Exchange
Попробуем просмотреть правила в почтовом ящике пользователя. Подключитесь к своему серверу Exchange с помощью PowerShell.
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://msk-exch1.winitpro.ru/PowerShell/ -Authentication Kerberos -Credential $UserCredential
Import-PSSession $Session
Если у вас Exchange Online, используйте модуль Exchange Online PowerShell:
Install-Module -Name ExchangeOnlineManagement
Connect-ExchangeOnline
В Microsoft 365 можно использовать в PowerShell аутентификацию с помощью сертификата.
Для управления правилами ящика используются следующие командлеты:
- Get-InboxRule
- New-InboxRule
- Enable-InboxRule
- Disable-InboxRule
- Set-InboxRule
- Remove-InboxRule
Чтобы вывести список правил в ящике Exchange, выполните команду:
Get-InboxRule –Mailbox abivanov
Командлет выведет имя правила, статус (Enabled: True/False), приоритет (Proirity) и RuleIdentity.
Можно вывести более подробную информацию о конкретном Inbox правиле, указав его имя:
Get-InboxRule -Mailbox abivanov -Identity "HelpDesk"| fl
Обычно содержание правила можно понять по полю Description:
Get-InboxRule -Mailbox abivanov -Identity "HelpDesk "| Select Name, Description | fl
В ящике Outlook могут присутствовать скрытые server-side правила. Эти правила не отображаются ни в клиенте Outlook ни в OWA. Чтобы вывести скрытые правила ящика, добавьте параметр —IncludeHidden:
Get-InboxRule -Mailbox abivanov -IncludeHidden
С помощью PowerShell вы можете найти определенные правила в ящике пользователя. Например, вам нужно найти все правила, в которых выполняется удаление писем:
Get-InboxRule -Mailbox abivanov | ?{ $_.DeleteMessage }
Также может быть сценарий, когда по запросу службы информационной безопасности, вам нужно найти во всех ящиках организации правила автоматической пересылки почты:
foreach ($i in (Get-Mailbox -ResultSize unlimited)) { Get-InboxRule -Mailbox $i.DistinguishedName | where {$_.ForwardTo} | fl MailboxOwnerID,Name,ForwardTo >> C:\PS\All_Mailbox_Forward_Rules.txt }
В целевом тестовом файле будет содержаться список ящиков, названия правил пересылки и адресатов, которым пересылаются сообщения.
Создать правило для входящей почты Outlook с помощью PowerShell
Создать новое правило Outlook для входящей почты можно с помощью командлета Exchange New-InboxRule. К примеру, вы хотите переслать все письма с определенными ключами в теме письма в другой ящик. Выполните команду:
New-InboxRule -Name ZenossAlerttoHelpdesk -Mailbox rootadmin -SubjectContainsWords "Zenoss Alert" -ForwardTo "Helpdesk"
New-InboxRule: Using Outlook Web App or Windows PowerShell to modify your rules will delete any rules that were previously turned off using Outlook. If you want to preserve the rules you turned off using Outlook, select "No" and use Outlook to edit your rules. Are you sure you want to proceed.
Следующее правило поставит красную категорию и высокую для всех писем с ключом «Годовое собрание» в теме от отправителя [email protected]:
New-InboxRule -Mailbox abivanov –name SecretaryRule -From [email protected] –SubjectContainsWords "Годовое собрание" -ApplyCategory "Red Category" -MarkImportance "High" -StopProcessingRules $true
Пример правила, которое перемещает все письма полученные до 01.01.2023 в папку Archive:
New-InboxRule -Name "Move to Archive" -Mailbox abivanov -MoveToFolder "abivanov:\Inbox\Archive" -ReceivedBeforeDate "01.01.2023"
Переслать все письма за определенный период:
New-InboxRule -name ForwardTo -mailbox abivanov -ReceivedAfterDate 12/12/2022 -ReceivedBeforeDate 01/01/2023 -ForwardTo [email protected]
Можете создать для всех пользователей в определенном Organizational Unit (OU) в AD правило, которое автоматически перемещает письма с темой «Казино» в каталог «Нежелательная почта» (Junk Email).
$mbxs = Get-mailbox -organizationalUnit Managers
$mbxs | % { }
$mbxs | % { New-inboxrule -Name SpamMail -mailbox $_.alias -subjectcontainswords “[казино]” -movetofolder “$($_.alias):\Junk Email” }
Список все доступных условий (Conditions), которые вы можете использовать в правилах Exchange можно вывести так:
Get-InboxRule -Mailbox abivanov | get-member
ApplyCategory
BodyContainsWords
CopyToFolder
DeleteMessage
Description
Enabled
FlaggedForAction
ForwardAsAttachmentTo
ForwardTo
From
FromAddressContainsWords
FromSubscription
HasAttachment
HasClassification
HeaderContainsWords
Identity
InError
IsValid
MailboxOwnerId
MarkAsRead
MarkImportance
MessageTypeMatches
MoveToFolder
MyNameInCcBox
MyNameInToBox
MyNameInToOrCcBox
MyNameNotInToBox
Name
Priority
ReceivedAfterDate
ReceivedBeforeDate
RecipientAddressContainsWords
RedirectTo
RuleIdentity
SendTextMessageNotificationTo
SentOnlyToMe
SentTo
StopProcessingRules
SubjectContainsWords
SubjectOrBodyContainsWords
SupportedByTask
WithImportance
WithinSizeRangeMaximum
WithinSizeRangeMinimum
WithSensitivity
-MessageTypeMatches Calendaring
.Если вы хотите создать правило в общем почтовом ящике Exchange, проверьте что вам назначена роль «Organization Management» или предоставлены права»Full Access» на почтовыя ящик. Вы можете предоставить права на ящик с помощью команды PowerShell:
Add-MailboxPermission -Identity sharedmbx -User aivanov -AccessRights FullAccess -AutoMapping:$false -InheritanceType All
Чтобы изменить какое-то правило Outlook, нужно использовать командлет Set-InboxRule, например:
Set-InboxRule -Mailbox abivanov –identity SecretaryRule -FromAddressContainsWords {mail.ru}
Некоторые правила невозможно загрузить в Microsoft Exchange, и они были отключены. Некоторые параметры не поддерживаются, или не хватает места для хранения всех ваших правил
Вы можете изменить размер квоты под правила (RulesQuota) до 256 Кб, выполнив команду:
Set-Mailbox -identity abivanov -RulesQuota 256Kb
Как отключить и удалить входящее правило Outlook из PowerShell?
Чтобы отключить конкретное правило Outlook, нужно указать:
Disable-Inboxrule –Mailbox abivanov -Identity “SecretaryRule”
При этом его статус (Enabled) меняется False и оно более не применяется ко входящим письмам.
Чтобы удалить правило, выполните:
Remove-Inboxrule –Mailbox abivanov -Identity SecretaryRule
Команда запросит подтверждение, просто введите Y. Чтобы удалить все правила в определенном ящике, выполните:
Get-inboxrule -mailbox abivanov | disable-inboxrule
Можно удалить все правила ящика через Outlook, для этого запустите его с дополнительным параметром:
Outlook.exe /cleanrules
Будут удалены все client-side и server-правила для всях ящиков, подключенных в вашем профиле Outlook.
Если при попытке включить или отключить автоответ в Outlook (Out of Office), появляется ошибка:
The Out Of Office Rules cannot be displayed. The client operation failed.
Или
System resources are critically low.
Причина проблемы – поврежденные правила в ящике. Воспользуйтесь PowerShell для удаления всех правил в ящике (в том числе скрытых)
Get-InboxRule -Mailbox abivanov -IncludeHidden | Remove-InboxRule
Спасибо ! Интересная тема.
Тема интересная.
Но еще интереснее обсудить настройку OoF на стороне почтового сервера, когда она настроена у клиента с пересылкой писем на другой почтовый ящик.
В Exchange 2013 такое правило (скрытое правило), можно увидеть, указав ключ -IncludeHidden.
А вот в Exchange 2010 такого ключа нет. И остаётся только Exchange Web Services (EWS) API. Вот про него очень не хватает статьи!
На сайте есть базовая статья про настройку автоответа в Exchange 2010 https://winitpro.ru/index.php/2014/05/15/nastrojka-avtootveta-polzovatelya-v-exchange-2010/
Про скрытые правила не знал. Что-то и инфы по IncludeHidden немного.
Т.е. правило пересылки в автоответе не отобразится в списке правил?
Вот здесь можно подробно почитать, о чём именно идёт речь:
https://social.technet.microsoft.com/Forums/ru-RU/a9e2e5ef-8045-409c-9e62-2ae9b415b2cf/
Про IncludeHidden стало известно от сотрудника Microsoft. На TechNet указано, что этот ключ для внутреннего использования, без пояснения подробностей)
Так что ждём статью про EWS))))
С Наступающим!
Спс и Вас с наступающими!
По поводу EWS даже не знаю, очень уже непопулярная тематика… Один с таким объемом не справлюсь.
…я когда пытался добавлять правила через PoSh прилетало жуткое сообщение — что-то типа, если вы назначите данное правило, то правила на стороне клиента буду удалены! Легкий шок не дал нажать на кнопку «Ok» )))
Интересно, это у нас так криво настроили Exchange (подрядчики) или автор про такую фичу забыл упомянуть ? (;
Какая версия Exchnage? У пользователя уже были правила? Не может быть, что проблема связана с превышением лимита на размер правил?
Exch 2013, Outlook 2016.
У пользователя было только 2 правила. Шибко разбираться не стал, поверил спецам — те сказали, да есть такая фича у Exchange. И, вроде, ссылку давали на оффсайт — мельком глянул, удостоверился и забыл… Странно, что это малоизвестно… Может я все-таки что-то напутал, ок — если найду, то скину ссылку!
Собственно, искать и не пришлось — все есть в описаниях командлетов на оффсайте:
New-InboxRule
Description
When you create, modify, remove, enable, or disable an Inbox rule in Exchange PowerShell, any client-side rules disabled by Microsoft Outlook and outbound rules are removed.
Set-InboxRule
Description
The Set-InboxRule cmdlet allows you to modify the rule conditions, exceptions, and actions.
When you create, modify, remove, enable, or disable an Inbox rule in Exchange PowerShell, any client-side rules created by Microsoft Outlook are removed.
Или я все-таки что-то не так понимаю ??
При добавлении нового правила с помощью New-InboxRul уведомление появляется:
Confirm. Using Outlook Web App or Windows PowerShell to modify your rules will delete any rules that were previously turned off using Outlook. If you want to preserve the rules you turned off using Outlook, select «No» and use Outlook to edit your rules. Are you sure you want to proceed?
Cтарые правила не удалились несмотря на предупреждение. При этом не появилось и новое правило, лишь висит уведомление «Имеются не показанные правила, созданные в другой версии Outlook или OWA»…
New-InboxRule — показывает и старые и новые правило… Я в задумчивости…
Да, такое было предупреждение, вроде…
Видимо, от настроек серверов зависит — у нас удаляются все client-side правила.
Я шибко разбираться не могу — доступ только к серверу баз данных. Да и то обрезанный.
Подскажите, плз, а есть ли возможность узнать сколько занимает конкретное правило или суммарно все правила созданные пользователем в Outlook?
Добрый день!
Подскажите как можно настроить правило что бы из одного почтового ящика пересылались письма от определенного адресата на другой почтовый ящик в exchange с помощью powershell?
New-InboxRule -Mailbox MailboxName -Name "Redirect Email" -From "[email protected]" -RedirectTo "[email protected]"
Добрый день!
Спасибо за статью!
Прошу подсказать, как можно через PowerShell добавить почтовому ящику [email protected] правило:
если пришло письмо с пустой темой + пустой текст письма + присутствует вложение (pdf) -> переместить письмо в папку «SPAM»
И еще одно правило: если текст письма (не тема) содержит слово «test» -> переместить письмо в папку «SPAM»
Имеется ли возможность создать серверное правило для ящика рассылки?
New-InboxRule как раз создает серверные правила. Но там не все действия по обработке писем возможны. Зависит от того, что вы хотите
Хочется перенаправлять другому адресату часть писем, приходящих на ящик рассылки (оставлен в качестве контактного на разных площадках, а надо отфильтровать одну). Вроде бы логически это такой же почтовый ящик, только из него всё со свистом улетает — но ведь это не должно мешать обработать входящие?
Пробовал вывести правила — ошибка «ящик не существует». Может синтаксис другой для рассылок?
Вы имеете в виду группу распротранения или mail-enabled группу? По факту для них нет ящиков.
Наверно быть вам стоит воспользоваться транспортными правилами.
Спасибо, посмотрю в этом направлении.
Вопросик тут возник, буду благодарен за подсказку:
Можно ли сделать так, что бы в том случае, если письма пришло извне организации, в тело письма добавлялось предупреждение, о том что письмо пришло от внешнего источника?
Типа большой красной надписи с предупреждением. А то участились случаи подмены адреса.
С помощью траспортного правила Exchnage можно добавить ко входящим письмам нужный дисклаймер
Перемещать прочитанные письма в другую папку в ящике. Это серверными правилами достигается или как ?
Учитывая что сервер 2010.
Правила (серверные или клиентские) обрабатывают почту при поступлении в ящик. В данном случае, если вы ждете пока пользователь прочитает письмо, встроенные правила вам не помогут.
Как варинт — можно дополнительно сканировать ящик внешним скриптом и перемещать прочитанные письма после.
Пример доступа к ящику из PowerShell через Outlook API:
https://winitpro.ru/index.php/2023/10/05/prosmotr-pisem-outlook-powershell/
Это делается только клиентским правилом.
Поищите на AllSoft утилиту RunAnyRule.
Подскажите, как сделать серверное правило — перемещение входящих от *@rogaikopyta.ru (то есть от любых пользователей домена @rogaikopyta.ru) в папку «Рога_и_копыта» с помощью PS и через web если допусается. Что-то никак не соображу..
Перемещение вроде это clien-side правило. На сервере не получится выполнять