Марк Минаси (www.minasi.com/gethelp) – старший редактор журнала Windows IT Pro, сертифицированный системный инженер по продуктам Microsoft

В статье «Автоматизация отчетов PowerShell, часть 1», опубликованной в предыдущем номере журнала, я рассказывал о send-mailmessage, одной из моих любимых команд PowerShell. Это программное средство по сути является SMTP-клиентом, работающим по команде, и позволяет отсылать электронную почту из командной строки. Мы рассматриваем send-mailmessage в рамках темы применения команд, предназначенных для управления Active Directory (AD), для создания отчетов AD, программирования серверов на составление этих отчетов в ночное время и их автоматической отправки по электронной почте. Этого, однако, нельзя сделать, не прибегая к помощи мощного инструмента, такого как модуль Windows Server SMTP Server.

Предположим, что в вашей системе каждую ночь в 3:00 запускается подпрограмма, генерирующая отчет под названием C:\reports\today.html. В предыдущей статье говорилось, что автоматическую отправку этого отчета по адресу admin@bigfirm.com можно организовать следующим образом:

send-mailmessage -from automaticjobs@bigfirm.com
-to admin@bigfirm.com -subject «Daily Active Directory Report»
-body «C:\reports\today.html»
-smtpserver ourmailserver.bigfirm.com -bodyashtml

Попытка выполнить эту команду из командной строки PowerShell, вероятно, окончится неудачей, поскольку правильно организованный почтовый сервер отсылает почту только от авторизованных пользователей, а это означает, что при вводе команды send-mailmessage PowerShell запросит учетные данные.

К сожалению, вас не будет на рабочем месте, чтобы ввести учетные данные, поскольку подпрограмма запускается в фоновом режиме в 3:00 утра на неком сервере. Что же делать? Не тратьте время на обращение за ответом на этот вопрос к Google, так как предложенные страницы будут содержать рекомендации выполнить загрузку и установку какого-нибудь бесплатного SMTP-сервера, который может оказаться незащищенным. В интернете и так уже достаточно «открытых ретрансляторов», то есть почтовых серверов, которые только и ждут, чтобы какой-нибудь спамер наполнил миллионы почтовых ящиков мусором.

Предлагаю вместо этого установить службу SMTP-сервера, давно входящую в состав Windows Server, настроив ее таким образом, чтобы авторизация не требовалась, но при этом действовали необходимые ограничения. Служба SMTP-сервера всегда была одним из наиболее важных компонентов IIS до IIS 6.0 и отличалась гибкостью, удобством настройки и программирования. Конечно, можно создать фильтры спама с помощью VBScript. Однако в Windows Server 2008 и IIS 7.0 этот компонент был без комментариев упразднен. Может быть, целью было увеличение продаж Exchange Server? Однако старый SMTP-модуль IIS 6.0 (Windows Server 2003) все же был включен, хотя необходимость его установки из графического интерфейса администрирования IIS 7.0 меня пока миновала.

С помощью PowerShell такая настройка выполняется элементарно:

1. Запустите PowerShell и введите следующую команду:

import-module servermanager
add-windowsfeature smtp-server
add-windowsfeature rsat-smtp

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

2. После установки SMTP-сервера необходимо обеспечить его безопасность путем соответствующей настройки в окне диспетчера служб IIS Server 2003. Чтобы открыть это окно, нажмите «Пуск», «Все программы», «Администрирование», «Диспетчер служб IIS 6.0».

3. В окне диспетчера служб IIS вы увидите значок с именем вашего сервера, а рядом с ним – local computer с символом «+». При нажатии на «+» появится значок, похожий на коричневатый конверт с исходящими из него линиями, обозначенный [SMTP Virtual Server #1].

4. Щелкните правой кнопкой и выберите «Свойства» для входа на страницу свойств [SMTP Virtual Server #1] с несколькими вкладками. Откройте вкладку «Доступ».

5. На этой вкладке нажмите «Ретрансляция» для входа в окно установки ограничений ретрансляции.

6. В окне установки ограничений ретрансляции снимите отметку флажка Allow all computers which successfully authenticate to relay, regardless of the list above («Разрешить ретрансляцию для всех компьютеров, успешно прошедших проверку подлинности (вне зависимости от списка выше)»). В этом же диалоговом окне убедитесь в наличии отметки переключателя Only the list below («Только компьютеры из списка ниже»), установка по умолчанию. Далее укажите, что серверу следует принимать запросы только от локальных процессов, для чего нажмите «Добавить», чтобы открыть окно добавления компьютеров.

7. В окне Add one of the following to the list («Добавьте в список один из указанных ниже параметров») поставьте отметку переключателя Single computer («Один компьютер»). В поле ввода IP-адреса (IP address) введите 127.0.0.1.

8. Для выхода из окна нажмите OK, закройте окно установки ограничений ретрансляции и окно настройки свойств [SMTP Virtual Server #1].

Таким образом, можно безопасно отправлять команду send-mailmessage на SMTP-сервер, указав локальный узел с помощью параметра -smtpserver localhost, и авторизация при этом не потребуется. Теперь можно перейти к задаче отправки отчета, что мы и сделаем в следующий раз.