Лимиты почтовых ящиков Exchange

Мы предоставляем услуги удаленного администрирования серверов

Лимиты почтовых ящиков Exchange

Обновлено и опубликовано Опубликовано:

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

Для подключения к Exchange необходимо вводить логин и пароль. Чтобы автоматизировать этот процесс и при этом не хранить пароль в открытом формате, сохраняем его в зашифрованном виде следующей командой:

> read-host -assecurestring | convertfrom-securestring | out-file C:\Scripts\password.txt

* после нажатия Enter система запросит ввести пароль, после чего она его зашифрует и сохранит в файл (в данном примере, C:\Scripts\password.txt).

Пример скрипта

  1. $username = «admins24\master»
  2. $password = cat C:\Scripts\password.txt | convertto-securestring
  3. $server = «exch01.admins24.local»
  4. $percentNeedExpand = 99
  5. $percentExpand = 10
  6. $percentWarningQuota = 98
  7.  
  8. $DbQuotaArr = @{}
  9. $userQuotaArr = @{}
  10. $userItemSizeArr = @{}
  11.  
  12. function ExchangeQuota-ToInt($quota) {
  13.     return $quota.split(‘(‘)[1].split(‘)’)[0].split(‘ ‘)[0].replace(‘,’,»)
  14. }
  15.  
  16. $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password
  17. $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/powershell -Credential $cred
  18. Import-PSSession $session
  19.  
  20. Get-MailboxDatabase | Select-Object Name,ProhibitSendQuota | ForEach-Object {
  21.     $database = $_.Name
  22.     $databaseQuota = $_.ProhibitSendQuota
  23.     if ($databaseQuota -ne «unlimited») {
  24.         $databaseQuota = ExchangeQuota-ToInt $databaseQuota
  25.     }
  26.     $DbQuotaArr[$database] = $databaseQuota
  27. }
  28.  
  29. $usersList = Get-Mailbox | Get-MailboxStatistics
  30. $usersList | Select-Object DisplayName,TotalItemSize,Database | ForEach-Object {
  31.     $user = $_.DisplayName
  32.     $userDatabase = $_.Database
  33.     $userItemSize = ExchangeQuota-ToInt $_.TotalItemSize
  34.     $userQuotaPars = Get-Mailbox -Identity $user | Select-Object ProhibitSendQuota,UseDatabaseQuotaDefaults
  35.     if ($userQuotaPars.UseDatabaseQuotaDefaults) {
  36.         $userQuota = $DbQuotaArr[$userDatabase]
  37.     } else {
  38.         $userQuota = ExchangeQuota-ToInt $userQuotaPars.ProhibitSendQuota
  39.     }
  40.     if ($userQuota -ne ‘unlimited’) {
  41.         $userQuotaArr[$user] = $userQuota
  42.         $userItemSizeArr[$user] = $userItemSize
  43.     }
  44. }
  45.  
  46. $userQuotaArr.Keys | % {
  47.     $userName = $_
  48.     $userNameQuota = [int64]$userQuotaArr[$userName]
  49.     $userNameItemSize = [int64]$userItemSizeArr[$userName]
  50.     $userNameItemSizePercent = [int](($userNameItemSize / $userNameQuota) * 100)
  51.     if ($userNameItemSizePercent -ge $percentNeedExpand) {
  52.         $prohibitQuota = [int64]($userNameQuota * ($percentExpand/100 + 1))
  53.         $issueWarningQuota = [int64]($prohibitQuota * (1 — (100-$percentWarningQuota)/100))
  54.         echo «»
  55.         echo $userName
  56.         Set-Mailbox  -UseDatabaseQuotaDefaults $false -IssueWarningQuota $issueWarningQuota -ProhibitSendQuota $prohibitQuota -ProhibitSendReceiveQuota $prohibitQuota -Identity $userName
  57.     }
  58. }

Описание скрипта

1 — 6Индивидуальные переменные. Для каждой среды и случая нужно менять только их, остальная часть скрипта не требует редактирования
1Имя пользователя для подключения к Exchange Server
2Пароль для подключения к Exchange Server. Читается хэш из файла
3Имя почтового сервера к которому будем подключаться
4Процент используемого пространства от 0 до 100, при превышении которого скрипт будет добавлять квоту
5Процент пространства, на которое будет увеличиваться квота пользователя
6Процент пространства от новой квоты для отправки пользователю предупреждения
8 — 10Определение хэш переменных для будущего использования. Если это не сделать заранее в Powershell, сценарий вернет ошибку.
8Массив баз данных с их лимитами по умолчанию
9Массив пользовательских квот для каждого пользователя индивидуально
10Массив занимаемого пространства для каждого пользователя индивидуально
12 — 14Функция преобразования строки дискового пространства, которую возвращает командлет Exchange, в число, соответствующее занимаемому пространству в байтах
16 — 18Подключение к серверу Microsoft Exchange
16Создаем переменную с логином и паролем
17Создаем переменную сессии с подключением к серверу, логином и паролем
18Подключаемся к серверу, используя переменную сессии
20 — 27Получаем массив баз данных, которые есть в нашем Exchange и их дисковые квоты по умолчанию. Данные нужны для пользователей, у которых не выставлены индивидуальные лимиты.
20Запрашиваем список всех почтовых баз, выбираем из полученных данных имена и квоты и инициируем блок скрипт для каждого полученного объекта
21Создаем переменную с именем базы
22Создаем переменную с квотой для базы
23Используем условие, если квота не безлимитная (unlimited)
24Изменяем переменную с квотой — преобразовываем строку в число байт
26Наполняем хэш-массив: добавляем элемент, где ключ — это имя почтовой базы, а значение — ее лимит по умолчанию
29 — 44Получаем список почтовых ящиков и создаем массив пользователей, для которых необходим анализ квот
29Создаем переменную, в которую поместим всю информацию по почтовым ящикам Exchange
30Обратимся к каждому ящику из переменной, созданной строчкой 29 и запустим для нее блок-скрипт
31Создадим переменную с именем пользователя ящика
32Создадим переменную с базой, в которой хранится почта пользователя
33Создадим переменную с объемом занимаемого пространства письмами пользователя
34Создадим массив из двух элементов — квоты для пользователя и указание на использование лимитов по умолчанию для базы
35Условие, если используются лимиты по умолчанию для почтовой базы пользователя
36В качестве лимита пользователя используем квоту базы
38Иначе, используем квоту пользователя, преобразовав ее в байты
40Если квота пользователя не безлимитна
41Добавляем элемент массива: ключ — пользователь, значение — его квота
42Добавляем элемент массива: ключ — пользователь, значение — занимаемого им пространство на сервере
46 — 58Проходим по всему списку пользователей и при необходимости, увеличиваем квоту на почтовый ящик Exchange
46Обращаемся к ранее полученному массиву с пользователями и начинаем блок-скрипт
47Создаем переменную для пользователя
48Создаем переменную с квотой пользователя
49Создаем переменную с занимаемым пространством пользователя
50Рассчитываем переменную с процентом занимаемого пространства от квоты
51Если процент занимаемого пространства выше или равен определенный нами в строке 4
52Рассчитываем новую квоту для пользователя
53Рассчитываем новую квоту для отправки предупреждений
54Выводим на экран пустую строку для разделения. Удобно, если скрипт запускать вручную
55Выводим на экран пользователя, для которого меняем квоту. Удобно, если скрипт запускать вручную
56Запускаем командлет для расширения квоты пользователя

   Мы принимаем