После обсуждения среди коллег со статусом MVP способов построения политик хранения для поддержания квот почтовых ящиков на определенном уровне я несколько часов экспериментировал с политиками хранения и PowerShell в поисках решения задач, сформулированных Джеффом Гуиллетом (MVP). Затем я записал результаты и отправил текст Джеффу с просьбой прокомментировать. Как оказалось, он только что опубликовал в своем дневнике запись, посвященную той же теме. Но Джефф избрал другой подход, к тому же мы использовали разные версии Exchange, так что я тоже решил опубликовать свою статью.

Итак, мы с коллегами по Exchange обсуждали стремление компании выполнять архивирование в зависимости от размера, а не от возраста данных, как предусмотрено политиками хранения. Если помните, вы можете определить политику хранения, которая содержит теги, использующие действие Move to Archive («Переместить в архив»), чтобы указать помощнику для управляемых папок (MFA) на необходимость перемещения элементов, подпадающих под действие политики, в архивный почтовый ящик после завершения периода сохранения.

Эта схема работает очень хорошо, если нужно применить такие политики, как «архивировать все объекты возрастом более двух лет», но не столь успешно, если требуется выполнять архивацию поэтапно, чтобы удержать пользователей в рамках выделенных им квот почтовых ящиков. Это требование можно выразить иначе: активность MFA в перемещении элементов из основного почтового ящика в архивный должна повышаться по мере увеличения размера почтового ящика.

Сначала я вынужден был признать, что политики хранения Exchange не рассчитаны на такие требования. Но потом Джефф Гуиллет (http://expta.com/) предложил отличную идею: можно составить схему, в которой контролируется размер почтовых ящиков и политики хранения переключаются в зависимости от размера почтового ящика. По мере увеличения размера ящика к нему применяется более активная политика, и MFA начинает быстрее архивировать элементы. Благодаря политике размер почтового ящика уменьшается, и по достижении порогового значения применяется другая политика, которая позволяет хранить элементы в почтовом ящике в течение более длительного времени. Это простая и эффективная схема, удобная в реализации.

Как выяснилось, у нас с Джеффом получился «конфликт дневников», поскольку каждый из нас предложил свою концепцию. Вариант Джеффа опубликован на его сайте (http://www.expta.com/2015/05/how-to-create-dynamically-adjusting.html). Он протестировал программный код на локальных и гибридных развертываниях Exchange и предложил ряд интересных советов по запуску запланированной задачи контроля почтовых ящиков.

Основную идею можно проиллюстрировать следующим образом. Предположим, нам нужно удержать пользователей в пределах 2 Гбайт квоты на почтовые ящики. Для этой цели развертываются три политики хранения.

  • Политика хранения 1 позволяет сохранить элементы в почтовом ящике в течение 90 дней. Применяется, когда размер почтового ящика составляет менее 1,65 Гбайт.
  • Политика хранения 2 позволяет сохранить элементы в почтовом ящике в течение 60 дней и применяется, когда размер почтового ящика достигает 1,65 Гбайт.
  • Политика хранения 3 сокращает период хранения до 30 дней и применяется, когда размер почтового ящика достигает 1,8 Гбайт.

Пороги различных уровней администратор выбирает самостоятельно; указанные значения приведены для иллюстрации.

Каждая политика хранения содержит стандартный тег сохранения в архиве с предпочтительным периодом хранения. Этот тег присваивается любому элементу в почтовом ящике, который не имеет тега папки (для стандартных папок, таких как «Входящие») или личного тега (для нестандартных папок или определенного элемента).

Политика хранения обычно содержит от 6 до 15 стандартных, личных тегов и тегов папки, но политика действительна, если содержит всего один тег. Например, среднюю 60-дневную архивную политику можно сформировать с помощью следующих команд PowerShell:

New-RetentionPolicyTag -Name
   ‘Default -60 days to archive’
   -RetentionEnabled $True
   -RetentionAction MoveToArchive
   -Type All -MessageClass *
   -AgeLimitForRetention 60
New-RetentionPolicy
   -Name ‘Retention Policy 2’
   -RetentionPolicyTagLinks
   ‘Default — 60 days to archive’

Естественно, можно создать теги хранения и политики из консоли центра администрирования Exchange (EAC), если вам так удобнее. На приведенном экране показана политика хранения, созданная с помощью двух команд PowerShell.

 

Новая политика хранения
Экран. Новая политика хранения

Применить политики хранения к почтовым ящикам несложно, выполнив команду Set-Mailbox. Однако для управления политиками необходимо провести предварительный анализ. Решение Джеффа: подготовить сценарий PowerShell, который можно периодически запускать для контроля размеров почтовых ящиков и назначения политик в зависимости от результатов. Я внес в этот сценарий небольшие изменения. Основная обработка выполняется путем выбора набора почтовых ящиков, которые нужно контролировать. Чтобы ускорить работу, такие почтовые ящики, как почтовые ящики помещения, почтовые ящики найденных сообщений и общие почтовые ящики, исключаются из обработки. Подлежащие обработке почтовые ящики пользователя отмечаются одним из настраиваемых атрибутов.

После того как будет составлен набор почтовых ящиков, запускается цикл для проверки текущего размера каждого почтового ящика с использованием команды Get-MailboxStatistics. Мы назначили политику хранения на основе размера почтового ящика и зафиксировали сделанное в переменной, которая записывается в другой настраиваемый атрибут для почтового ящика. Эта информация также сохраняется, чтобы впоследствии ее можно было включить в отчет.

# Поиск почтовых ящиков, подпадающих
   под проверку для динамического
   хранения
$Mbx = Get-Mailbox -ResultSize
   UnLimited -Filter {RecipientTypeDetails
   -q 'UserMailbox' -and CustomAttribute10
   -eq 'AA'}
# Обработка каждого почтового ящика,
   проверка текущего размера почтового
   ящика и выбор подходящей политики.
   Сбор подробных сведений в почтовом
   ящике и файле отчета
ForEach ($M in $Mbx) {
  $Alias = $M.Alias
  $MbxSize = [math]::Round(((Get-
    MailboxStatistics -Identity $Alias).
    TotalItemSize.Value.ToString().Split("(")
    [1].Split(" ")[0].Replace(",","")/1GB),2)
  $OutMessage = "Mailbox Size " +
    $MbxSize +"GB" + " on " + (Get-Date)
  If ( $MbxSize -gt "1.8" ) {
       $RP = $RP1
  }
  elseif ( $MbxSize -gt "1.65" ) {
      $RP = $RP2
  }
  else {
      $RP = $RP3
  }
  Set-Mailbox $Alias -RetentionPolicy
    $RP -CustomAttribute11 $OutMessage
     -ErrorAction SilentlyContinue
  $ReportRow = New-Object -Type PSObject
     -Property @{
                 Name = $M.DisplayName
                 Policy = $RP
                 Info = $OutMessage}
  $Report += $ReportRow
}

Не совсем ясное форматирование переменной $MbxSize — для того, чтобы преобразовать данные о размере почтового ящика, возвращенные командой Get-MailboxStatistics, в формат, пригодный для проведения сравнений. По какой-то причине Exchange возвращает данные собственного типа, особенно для этой команды.

Отчет HTML, формируемый сценарием, еще раз демонстрирует, как просто найти в Интернете программный код PowerShell и использовать его в своих целях.

Политики хранения можно перенастроить таким образом для Exchange 2010, Exchange 2013 (и Exchange 2016) и Exchange Online.

Особенно впечатляет гибкость Exchange, в частности в сочетании с PowerShell. Полный текст сценария можно загрузить из TechNet Gallery (https://gallery.technet.microsoft.com/Dynamic-Exchange-retention-c1dbe51e).