Управление outlook через powershell

Обновлено: 04.07.2024

Продолжаю тему пакетной обработки пользователей.На этот раз возникла потребность создать в Outlook карточки контактов по данным учётных записей пользователей. Причём не важно – берём данные из .csv файла или из AD. Решим простую на первый взгляд задачу.

Первым делом полез в сеть и нашёл массу примеров кода для решения данной задачи разной степени сырости. Лучшую заготовку нашёл у xaerg:

Естественно – это просто заготовка, к тому же приведённый код частично обрабатывает только контакты из AD, а не учётные записи пользователей.

Можно пытаться дорабатывать вышеприведённый код, но он сильно далёк он от PoSh стиля. А хочется иметь такой вот код для импорта контактов из .csv файла:

Выше приведённый код прекрасно вписывается в идеологию PowerShell. Но, естественно, он подразумевает использование модуля, который и предоставляет нам командлеты – обёртки над объектами контактов в Outlook. Приведу код модуля ITG.Outlook. Репозиторий модуля размещён на github:

Благодаря приведённому выше модулю Вы теперь можете и запрашивать и обрабатывать объекты контактов Outlook в стиле PoSh:

Так ведь явно приятнее в PowerShell, чем писать груду dotNet кода?

Из тонкостей обращаю внимание на применение атрибутов параметров ValueFromPipelineByPropertyName=$true . Приведу небольшую цитату из приведённого выше кода модуля:

Мы описываем параметр для командлетов New-Contact , Set-Contact как необязательный, при этом сообщаем, что его значением может быть установлено из одноимённого (с учётом псевдонимов!) свойства объекта, поступившего по конвейеру (pipeline) нашему командлету. Идентификатор параметра в точности соответствует идентификатору свойства Фамилия объекта "Контакт" MS Outlook. А псевдоним совпадает с идентификатором соответствующего свойства объектов User и Contact из AD. Такой подход позволяет передать по конвейеру нашим командлетам выход Get-ADUser без предварительной обработки, и при этом параметр $LastName получит значение реквизита sn объекта AD. Другими словами, сопоставление реквизитов объекта Контакт MS Outlook и AD User мы осуществили в описании параметра командлета!

А теперь цитата кода, осуществляющего непосредственно изменение свойств объект Контакт:

Этим кодом мы изменяем все те и только те свойства, значения которых либо явно определены при применении командлеты, либо определены по реквизитам поступившего по конвейеру объекта! Суть кода в следующем: мы получаем коллекцию описаний параметров командлеты Set-Contact. Зачем выбираем те параметры, которые отнесены к набору параметров ‘contactProperties’ (в данном случае набор параметров использовал исключительно для группировки параметров, соответствующих свойствам объекта Контакт, не более). После чего проверяем – установлено ли значение параметра. И только если оно установлено – меняем соответствующее свойства объекта Контакт.

Такая вот обёртка…

В ближайшее время планирую добавить командлеты ConvertTo-OutlookContact, ConvertFrom-OutlookContact. Суть последней – в преобразовании объекта Контакт MS Outlook в объекта класса PSObject с набором свойств, соответствующим именовании аналогичных свойств в AD. В этом случае мы сможем выполнить и обратную процедуру – из коллекции контактов Outlook создать объекты Contact в AD.

В общем – буду благодарен Вам за любые комментарии и предложения. С уважением приму комиты в проект на github.

date

11.12.2018

directory

Exchange, PowerShell

comments

комментариев 12

Клиентские и серверные правила Outlook

Администратору Exchange следует отличать правила Outlook, которые функционируют на стороне клиента (Client-side rules) и на стороне сервера (Server-side rules).

Правила для входящих писем в Outlook, только клиент

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

Чтобы вывести список правил в ящике Exchange, запустите консоль EMS и выполните следующую команду PowerShell:

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 - получить данные о правиле

Поиск правил в ящиках пользователей Exchange

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

Get-InboxRule -Mailbox abivanov | ?

Также может быть сценарий, когда по запросу службы информационной безопасности, вам нужно найти во всех ящиках организации правила автоматической пересылки почты:

foreach ($i in (Get-Mailbox -ResultSize unlimited)) < Get-InboxRule -Mailbox $i.DistinguishedName | where | 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 -Mailbox abivanov –name SecretaryRule -From secretary@winitpro.ru –SubjectContainsWords “Годовое собрание" -ApplyCategory -MarkImportance 2

Для всех пользователей в определенном OU создадим правило, которое автоматически перемещает письма с темой «Казино» в каталог «Нежелательная почта» (Junk Email).

$mbxs = Get-mailbox -organizationalUnit Managers
$mbxs | % < >
$mbxs | %

Список все доступных условий (Conditions), которые вы можете использовать в правилах Exchange можно вывести так:

Get-InboxRule -Mailbox abivanov | get-member

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

Чтобы изменить какое-то правило Outlook, нужно использовать командлет Set-InboxRule, например:

Set-InboxRule -Mailbox abivanov –identity SecretaryRule -FromAddressContainsWords

Совет. Размер правил в ящике Microsoft Exchange ограничен (см. статью). В Exchange 2003 размер правил ограничен 32 Кб, а в Exchange 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. Чтобы удалить все правила в определенном ящике, выполните:

2 ответа 2

Я сделаю краткое руководство по установке

Загрузите файлы OCT

Поместите папку Admin, которую вы извлекаете из этой установки, в каталог с установкой версии Office, а затем запустите из командной строки setup.exe /admin


После этого вы получите настройки Office, вы можете пропустить все и сразу перейти к профилю Outlook Введите желаемые настройки здесь

После этого перейдите в Настройки экспорта и сохраните файл PRF где-нибудь в сети.

Сейчас есть 2 способа сделать это

Чтобы это значение реестра работало, значения FirstRun и First-Run могут не существовать в ключе установки.

Таким образом, он будет импортировать файл только один раз при первом запуске Outlook.

Раскрытие информации: я представляю продукт, который я упоминаю ниже

Это может быть сделано довольно легко с PowerMapi, модулем PowerShell, который позволяет вам продвигать вещи непосредственно с mapi, включая профили Outlook.

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

Командлет также предлагает варианты добавления почтового ящика Office365 в новый профиль или настройки подключений Outlook Anywhere. Посмотрите на детали для нового MapiProfile.

Имейте в виду, что в приведенном выше примере все равно будет запрашиваться имя пользователя и пароль, если текущий пользователь также не является "владельцем" malibox. Если компьютер не присоединен к домену, или пользователь входит в систему как локальный пользователь (не как пользователь домена), то будет выдан запрос на ввод учетных данных.

И, наконец, PowerMapi предоставляет полный доступ ко всем свойствам и атрибутам профилей, служб профилей и поставщиков профилей. С помощью этого можно предварительно заполнить все свойства профиля, вместо того, чтобы mapi выполнял вызов "configure", который требует сетевого взаимодействия. Однако это следует оставить тем, кто знаком с мапи.

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

Это может быть полезно, в случае если необходимо централизованно добавить всем пользователям правило, (прим.) которое будет помечать входящие письма от руководства, как важные.

Управление почтовыми правилами осуществляется через консоль EMS (Exchange managment Shell). В работе имеется MS Exchange 2010 SP3, на нем и рассмотрим различные методы управления почтовыми правилами.

Типы правил Outlook

Правила Outlook могут быть как на стороне сервера (Server-side), так и на стороне клиента (Client-side). Для управления ими нужно иметь понимание какое различие между этими правилами.

  • Правила на стороне сервера (Server-side): их выполнение полностью выполняется сервером Exchange. Они применяются даже тогда, когда клиент Outlook пользователя находится в автономном режиме.
  • Правила на стороне клиента (Client-side). Эти правила выполняются только в том случае, если Outlook подключен к сети и пользователь вошел в систему. Правило не будет работать, если к электронной почте обращаются с другого почтового клиента или мобильного устройства. Так же, невозможно управлять ими через EMS (Exchange managment Shell).

Чтобы проверить, является ли правило на стороне сервера или на стороне клиента, вы можете использовать окно «Управление правилами и оповещениями» в Outlook. К клиентским правилам добавляется (только клиент) к имени правила, а к серверным правилам ничего не добавляется:


Наверняка определить типа правила, можно только в Outlook, в консоли EMS (Exchange managment Shell) нет конкретного обозначения типа правила, но обычно правила на стороне клиента имеют более короткое описание в EMS, но вряд ли это надежный способ определения типа правила.

Управление правилами Outlook с помощью EMS

Начиная с Exchange Server 2010, Microsoft предоставила возможность использовать EMS (Exchange managment Shell) для удаленного управления правилами Outlook. Для этого используются следующие командлеты:

Просмотр правил (Get-InboxRule)

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

Читайте также: