exchange-server-logo

Автоматическое включение журнала аудита почтового ящика (Mailbox Audit Logging) при создании ящика

Если в вашей организации используется Mailbox Audit Logging на всех почтовых ящиках, то скорее всего, есть необходимость автоматизировать его включение на всех создаваемых ящиках. Это позволит избежать ситуаций, когда аудит забыли включить при создании ящика.
В этой статье я рассмотрю автоматизацию этого процесса с помощью Scripting Agent — агента расширения командлета (Cmdlet Extension Agent). Подробнее о агентах расширения командлета можно прочитать здесь. Вкратце, суть агентов расширения сводится к тому, что они позволяют выполнить дополнительные действия при выполнении командлета. Администраторы могут настраивать эти действия, расширяя, таким образом, функционал командлетов.

Включаем Scripting Agent, если он не был включен ранее

Проверяем текущее состояние агента:

[PS] C:\Windows\system32>Get-CmdletExtensionAgent | ft name,enabled -auto

Name                               Enabled
----                               -------
Admin Audit Log Agent                 True
Rus Agent                             True
Provisioning Policy Agent             True
Query Base DN Agent                   True
OAB Resources Management Agent        True
Mailbox Resources Management Agent    True
Scripting Agent                      False
Mailbox Creation Time Agent           True

При включении агента расширения командлета Scripting Agent он вызывается при каждом запуске командлета. Это относится не только к командлетам, запускаемым пользователем в EMS, но и к командлетам, запускаемым службами Exchange и центром администрирования Exchange.
Первым шагом мы распространяем конфигурацию Scripting Agent на все серверы Exchange в организации. Это можно сделать вручную, распространив файл конфигурации ScriptingAgentConfig.xml на все серверы. Либо воспользоваться сценарием PowerShell GitHub  для распространения файла конфигурации, если серверов много.
Файл ScriptingAgentConfig.xml должен находится в <путь_установки>\V15\Bin\CmdletExtensionAgents. 
Для включения аудита файл конфигурации должен содержать соответствующие команды:

Не забудьте изменить суффикс domain.com на свой

<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
  <Feature Name="NewMailbox" Cmdlets="new-Mailbox">
   <ApiCall Name="OnComplete">
    if($succeeded)    {
                Start-sleep 20
                $DC = [string]($readOnlyIConfigurable.originatingserver)
                $newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]
                Set-mailbox -Identity $Newmailbox -AuditEnabled:$true -DomainController $DC.domain.com
    }
   </ApiCall>
  </Feature>
  <Feature Name="EnableMailbox" Cmdlets="enable-Mailbox">
   <ApiCall Name="OnComplete">
    if($succeeded)    {
                Start-sleep 20
                $DC = [string]($readOnlyIConfigurable.originatingserver)
                $newmailbox = $provisioningHandler.UserSpecifiedParameters["Identity"]
                set-mailbox -Identity "$newmailbox" -AuditEnabled:$true -DomainController $DC.domain.com
    }
   </ApiCall>
  </Feature>
</Configuration>

Start-sleep можно попробовать изменить в меньшую или большую сторону, всё зависит от скорости репликации Active Directory в вашем сайте.
При успешном выполнении командлетов New-Mailbox или Enable-Mailbox запускается командлет Set-Mailbox, который включает аудит.
После распространения файла конфигурации включаем Scripting Agent:

[PS] C:\Windows\system32>Enable-CmdletExtensionAgent "Scripting Agent"
[PS] C:\Windows\system32>

Проверяем работу агента

Для проверки работоспособности Scripting Agent создадим новый почтовый ящик через Exchange admin Center и проверим включился ли для него аудит:

[PS] C:\Windows\system32>Get-Mailbox testuser | fl auditenabled

AuditEnabled : True

[PS] C:\Windows\system32>

Как видим, Scripting Agent отработал успешно и аудит для нового ящика включен.

Понять, что конкретно приходит в $provisioninghandler.UserSpecifiedParameters можно выгрузив данные переменной в текстовый файл:

<?xml version="1.0" encoding="utf-8" ?>
  <Configuration version="1.0">
  <Feature Name="Auditing" Cmdlets="New-Mailbox,Enable-Mailbox">
  <ApiCall Name="OnComplete">
  If ($succeeded)
 {
	$provisioningHandler.UserSpecifiedParameters > c:\provisioningHandler.txt
 }
  </ApiCall>
  </Feature>
  </Configuration>

Это удобно, когда требуется понять, чем можно оперировать в сценарии.

Примеры использования Scripting Agent: https://blogs.technet.microsoft.com/rmilne/2014/06/24/exchange-scripting-agent-the-power-of-script/

Добавить комментарий