Управление почтовыми правилами в ящике Exchange с помощью PowerShell

Правила почтового ящика 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, только клиент

Когда вы создаете новое правило в Outlook, которое обрабатывается на клиенте, появится предупреждение:

This rule is a client-only rule, and will process only when Outlook is running.

outlook это правило только для клиента

Get-InboxRule: Просмотр правил в ящике Exchange

Попробуем просмотреть правила в почтовом ящике пользователя. Подключитесь к своему серверу Exchange с помощью PowerShell.

Если у вас используется on-premises организация Exchange Server, подключитесь к серверу с помощью PowerShell команд :

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://msk-exch1.remontka.com/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

Get-InboxRule список входящих правил в ящике exchange

Командлет выведет имя правила, статус (Enabled: True/False), приоритет (Proirity) и RuleIdentity.

Можно вывести более подробную информацию о конкретном Inbox правиле, указав его имя:

Get-InboxRule -Mailbox abivanov -Identity "HelpDesk"| fl

Обычно содержание правила можно понять по полю Description:

Get-InboxRule -Mailbox abivanov -Identity "HelpDesk "| Select Name, Description | fl

Get-InboxRule - получить данные о правиле

Командлет Get-InboxRule не выводит правила клиента Outlook.

В ящике 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:PSAll_Mailbox_Forward_Rules.txt }

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

Создать правило для входящей почты Outlook с помощью PowerShell

Создать новое правило Outlook для входящей почты можно с помощью командлета Exchange New-InboxRule . К примеру, вы хотите переслать все письма с определенными ключами в теме письма в другой ящик. Выполните команду:
New-InboxRule -Name ZenossAlerttoHelpdesk -Mailbox rootadmin -SubjectContainsWords "Zenoss Alert" -ForwardTo "Helpdesk"

New-InboxRule создать правило в ящике outlook с помощью powershell

В некоторых случаях, когда вы создаете правила в ящике с помощью PowerShell, все клиентские правила Outlook отключаются:

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:InboxArchive" -ReceivedBeforeDate "01.01.2023"

правила в ящике outlook веб

Переслать все письма за определенный период:

New-InboxRule -name ForwardTo -mailbox abivanov -ReceivedAfterDate 12/12/2022 -ReceivedBeforeDate 01/01/2023 -ForwardTo [email protected]

При отслеживании сообщений в Exchange с помощью Get-MessageTrackingLog пересылка письма с помощью правил ящика в логе отображается как событие с Source MAILBOXRULE .

Можете создать для всех пользователей в определенном 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

все условия (Conditions) для inbox правил в exchange

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

Чтобы создать правило для приглашений календаря в почтовом ящике Exchange , используйте параметре -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 ограничен (см. статью ). Учитываются только включенные правила. В ящике может быть неограниченное количество отключенных правил. В Exchange 2003 размер правил ограничен 32 Кб, а в Exchange 2019/2016/2013/2010 – под правила выделяется 64 кб.

Некоторые правила невозможно загрузить в 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.

ошибка outlook не могу отобразить правила

Причина проблемы – поврежденные правила в ящике. Воспользуйтесь PowerShell для удаления всех правил в ящике (в том числе скрытых)

Get-InboxRule -Mailbox abivanov -IncludeHidden | Remove-InboxRule

EnglishRussianUkrainian