Как отправлять сообщения из PowerShell в Exchange Server 2010?

Активное использование PowerShell в Exchange Server 2010 вызывает необходимость отправки результатов выполнения скриптов по электронной почте. В PowerShell 1.0 не было встроенной функции отправки сообщений и приходилось использовать самописные функции, основанные на отправке с помощью .NET. Плохого в этом ничего нет, но необходимость в них отпала, т.к. с версии PowerShell 2.0 появился командлет . При его использовании существует несколько особенностей и о них я хочу рассказать ниже.
Я недавно смотрел на сайте компании Idera, который проводил гуру PowerShell и обратил внимание, как он предлагает использовать данный командлет. Идея предельно проста, все параметры загоняются в массив и передаются функции отправки в качестве параметра. Так гораздо удобнее работать с параметрами.
Скрипт отправки выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 |
$report="<pre>" +(Get-mailbox | sort| out-String) $message = @{ to = 'administrator@exchlab.ru' from = 'report@exchlab.ru' subject ='List of mailboxes' body=$report bodyashtml = $true smtpserver= $env:computername } Send-MailMessage @message |
После выполнения этих строк администратор получит сообщение следующего вида:

Давайте теперь разберем действия вышеприведённого скрипта.
1 |
$report="<pre>" +(Get-mailbox | sort| out-String) |
Эта команда в строковую переменную $report записывает HTML тег «<pre>» и список почтовых ящиков, отсортированных по имени.
Тег «<pre>» нужен для нормального отображения в сообщении вывода команды get-mailbox, иначе символы сбиваются и читать их неудобно. По хорошему строку надо закрыть тегом «</pre>», но HTML нас прощает
. Поскольку get-mailbox возвращает объекты, то out-string преобразует эти объекты в строки.
1 |
smtpserver= $env:computername |
В этой строке указываем имя текущего компьютера, на котором установлен SMTP сервер и через него PowerShell будет отправлять сообщение. Имя сервера берется из переменной окружения COMPUTERNAME. Можно еще использовать конструкцию « (hostname)», но это противоречит традициям латвийского скриптописания.
Правда существует еще два тонких момента:
- Нужно создать новый Receive connector и разрешить на нем анонимный прием сообщений с IP сервера, который будет отправлять сообщения. Можно конечно отправлять от имени специальной учетной записи, что является более правильным способом, но тогда нужно каким-то образом хранить в скрипте или еще где-то пароль, что является плохой практикой. Поэтому остановимся на анонимной отправки с определенных IP адресов.
- Если отправка будет идти от анонимного пользователя, то нужно создать транспортное правило, которое будет во все сообщения, содержащие адрес отправителя report@exchlab.ru устанавливать заголовок SCL = -1. Это нужно для того, чтобы отправленные сообщения не попадали в Junk email в Outlook. Вообще такое правило должно быть в любой организации, т.к. не все приложения умеют отправлять сообщения от учетных записей.
- Как запретить прием писем от своего домена?
- Как получить список всех почтовых адресов в организации Exchange?
- Как отправить сообщение от имени группы рассылки?
- Как настроить автоматическое подключение Outlook к Exchange Server 2010 в корпоративной сети?
- Как посмотреть лимиты баз сообщений в организации Exchange?
15.12.2011
·
Pavel Nagaev
· 830 просмотров
·
Комментариев нет
Метки: anonymous, powershell, receive connector, send message · Рубрики: PowerShell




Написать комментарий