- Вывести список баз exchange
- Как выгрузить список почтовых ящиков в Exchange Server
- Бонусный скрипт получения списка адресов с размерами
- Работа с базой данных Exchange
- Просмотр содержимого базы
- Дефрагментация
- Перемещение файла базы в другую папку
- Перемещение почтовых ящиков между базами
- Переместить все ящики
- Переместить один ящик
- Освобождение пространства базы после перемещения ящиков
- Удаление копии базы в DAG-группе
- Графический интерфейс
- Powershell
- Включение активной копии базы в DAG
- Графический интерфейс
- Powershell
- Отключение или включение ведения циклического журнала
- Графический интерфейс
- Powershell
- Ручное удаление файлов журанала
- Переиндексация базы (восстановление поиска или репликации)
- Одна копия базы
- При использовании DAG
- Перенос отключенных почтовых ящиков между базами
Вывести список баз exchange
Добрый день! Уважаемые читатели и гости лучшего IT блога страны pyatilistnik.org. В прошлой статье, о автоматическом подключении почтового ящика в Outlook, я рассказал, что буду чаще рассказывать про Microsoft Exchange Server, который я долго обходил стороной. Продолжаю придерживаться своему обещанию, и сегодня хочу поведать, о том как можно выгрузить список почтовых ящиков в Exchange Server, это очень часто встречающаяся необходимость, которую выполняют системные администраторы в свои трудовые будни. Я расскажу, как фильтровать все это дело, подсчитывать общее количество почтовых ящиков, и научу все это выгружать в текстовый файл, для последующего анализа. Уверен, что данная заметка окажется весьма полезной, тем людям, кто только начал работать с этим монстром от Microsoft.
Как выгрузить список почтовых ящиков в Exchange Server
Хочу отметить, что данные команды будут работать как на Microsoft Exchane Server 2010, так и на 2013-16. И так, первая задача, узнать какие активные почтовые ящики есть на нашем Exchange Server, для выполнения нашей задачей мы воспользуется командлетом powershell Get-Mailbox . Открываем Exchange Management Shell (EMS), она находится в меню «Пуск»
Кстати Exchange Management Shell (EMS) имеет, только в 2010 SP1 почтовом сервере, свыше 500-та командлетов, так, что работать в ней можно очень серьезно.
Пишем вот такую команду:
На выходе вы получаете список ящиков, учьтите, что время получения результата, прямо завит от количества почт на сервере Exchane, поэтому консоль powershell может подвисать. У меня получился вот такой вывод, содержащий адреса электронных почтовых ящиков Exchange, вы сразу у себя заметите, что вывод команды отдается все не по алфавиту, что не всегда удобно для анализа.
Чтобы выгрузка списка почтовых адресов была по алфавиту, то вам нужно слегка видоизменить вашу команду:
В итоге я уже получил список почтовых ящиков в базе Exchange, отформатированный по алфавиту, что позволяет более упрощенно производить поиск п/я.
Но результаты выгрузки списка почтовых ящиков могут быть длинными и не умещаться на экране вывода powershell, для этого удобно все это дело будет выгрузить в текстовый файл, по которому легко будет и производить поиск и фильтровать. Для этого в есть командлет Out-File .
- Где Out-File C:\scripts\all_mailbox.txt — это путь до файла all_mailbox.txt в папке C:\scripts\, вы его меняете на свое значение
[PS] WARNING: By default, only the first 1000 items are returned. Use the ResultSize parameter to specify the number of items returned. To return all items, specify «-ResultSize Unlimited». Be aware that, depending on the actual number of items, returning all items can take a long time and consume a large amount of memory. Also, we don’t recommend storingn the results in a variable. Instead, pipe the results to another task or script to perform batch changes.
Обратите внимание, что по умолчанию выводится только 1000 ящиков, если нужно больше, то придется ввести параметр -ResultSize Unlimited.
Теперь давайте мы узнаем информацию, сколько у нас адресов почтовых ящиков в базе почтового сервера, для этого выполните:
У меня на одном из серверов их оказалось 2159 штук.
Еще бывают задачи от руководства или сотрудников, это посчитать и получить список почтовых ящиков на определенном домене, если кто-то не в курсе, то Microsoft Exchange Server позволят обслуживать огромное количество доменов, это нормальная практика. В итоге мы воспользуемся вот такой конструкцией.
Если вы хотите получить названия почтовых адресов в организации, чаще всего это ФИО и дату их создания, то выполните такую команду:
Как видите я получил точную дату, когда были созданы почты в организации и кому в плане ФИО, они принадлежат.
Чтобы выгрузить список пользователей, которые не заходили в почтовый ящик более, чем 30 дней с выгрузкой в файл, то выполните
Это позволит вам выявить пользователей, кто за зря занимает место в базе данных Exchange сервера. Еще могут быть ситуации, когда вам нужно выяснить какие почтовые адреса были созданы вашей почтовой системе, например, за последние 20 дней, для этого выполните:
Обратите внимание, что в выводе ft, вы можете задавать много параметров, например, база данных database. Можно даже узнать, за конкретный месяц, так, например, получите список почтовых ящиков за сентябрь
Ну и за весь год, на момент написания статьи это 2018 год.
Напоминаю, чтобы посчитать количество, вам нужно воспользоваться Measure-Object
Бонусный скрипт получения списка адресов с размерами
В выводе будет реальный размер почтовых ящиков в базе данных Exchange сервер с учетом удаленных писем из каталога Recoverable Items. Скачать готовый скрипт можно по ссылке слева.
Как видите получить список всех почтовых адресов в организации Exchange, очень просто, для этого не нужно быть гуру Powershell и мега крутым программистом, достаточно выучить несколько конструкций и ключей.
Источник
Работа с базой данных Exchange
Данная статья представляет из себя шпаргалку по работе с почтовой базой Exchange на примере версий 2010, 2013 и 2016.
Работа с почтовой базой несет в себе потенциальную опасность потери всей информации. Прежде, чем начать работу, стоит убедиться в наличии актуальной резервной копии.
Просмотр содержимого базы
1. Список элементов базы можно увидеть командой в Powershell:
Get-MailboxStatistics -Database «Base1»
* где Base1 — имя базы данных, содержимое которой необходимо посмотреть.
Важно отметить, что это могут быть уже перенесенные элементы.
2. Список действующих ящиков, находящихся в базе:
3. Размер почтовых ящиков в базе:
Get-Mailbox -Database Base1 | Get-MailboxStatistics | sort TotalItemSize -descending | ft DisplayName, TotalItemSize, ItemCount
4. Список всех элементов в базе и занимаемый ими размер:
Get-MailboxStatistics -Database Archive | Sort TotalItemSize -descending | ft DisplayName, TotalItemSize
5. Посмотреть системные почтовые ящики:
Get-Mailbox -Arbitration | FL Name, DisplayName, ServerName, Database, AdminDisplayVersion
6. Установленные квоты
На все базы данных:
Get-MailboxDatabase | fl Name, *Quota
На конкретную базу:
Get-MailboxDatabase Base1 | fl Name, *Quota
Дефрагментация
Необходима для освобождения пространства, занимаемого файлом базы. Это связано с тем, что при удалении элементов, сама база не уменьшается.
Посмотреть, какое количество пространства удастся высвободить можно командой:
Get-MailboxDatabase -Status | ft Name, DatabaseSize, AvailableNewMailboxSpace
Name DatabaseSize AvailableNewMailboxSpace
—- ———— ————————
Base1 686.4 GB 286.4 MB
Base2 170 GB 69.42 GB
* где DatabaseSize — текущий размер базы; AvailableNewMailboxSpace — пространство, которое можно освободить при дефрагментации.
Саму оптимизацию можно выполнить двумя способами:
- Офлайн дефрагментация.
- Создание новой базы с последующим переносом в нее всех элементов; после, базу можно отключить и перенести или удалить. Это более надежный вариант, так как не приведет к большому простою и позволит выполнить работу постепенно.
В текущем подразделе мы рассмотрим первый способ.
Офлайн дефрагментация приведет к отключению почтовой базы и, как следствие, приостановку работы почтовых ящиков, которые в нем содержатся.
Если используется база на основе группы DAG, сначала необходимо удалить неактивную копию.
Операция дефрагментации выполняется из Exchange Management Shell с применением утилиты eseutil.
Сначала переходим в каталог хранения базы данных, например:
cd C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1
Выполняем команду для отмонтирования базы:
* напомним, что это приведет к отключению базы и приостановки обслуживания.
eseutil /d Base1.edb /t \\share\base1_tmp.edb
* где опция d — имя файла базы; t — путь до временного файла на момент дефрагментации, если его не указать, временный файл будет создан в каталоге с основным файлом и, в таком случае, нужно убедиться, что на диске достаточно свободного места (110% от размер дефрагментируемого файла).
После завершения операции, снова подключаем базу:
Перемещение файла базы в другую папку
Если используется база на основе группы DAG, сначала необходимо удалить неактивную копию.
Вытаскиваем GUID для нужной базы:
Get-MailboxDatabase Base1 | fl Name, Guid
Используя GUID, перемещаем базу:
Move-DatabasePath -Identity 55e0595f-9b48-4285-b12a-faeb8efa7278 -EdbFilePath D:\Database\NewPath
* где 55e0595f-9b48-4285-b12a-faeb8efa7278 — идентификатор перемещаемой базы; D:\Database\NewPath — каталог, куда будет перемещена база (если не создан, система создаст автоматически).
На вопросы консоли отвечаем утвердительно — Y.
Перемещение почтовых ящиков между базами
Переместить все ящики
Для переноса почтовых ящиков из Base1 в Base2 выполняем следующую команду в Powershell:
Get-Mailbox -Database «Base1» | New-MoveRequest -TargetDatabase «Base2»
После не забываем перенести системные почтовые ящики, если они есть в базе:
Get-Mailbox -Database «Base1» -Arbitration | New-MoveRequest -TargetDatabase «Base2»
Посмотреть статус перемещения можно командой:
Переместить один ящик
Для перемещения одного единственного ящика в новую базу, вводим команду:
New-MoveRequest -Identity ‘user’ -TargetDatabase Base7
* в данном примере мы перенесем почтовые данные пользователя user в базу Base7.
Посмотреть статус перемещения можно командой:
Освобождение пространства базы после перемещения ящиков
Мы заметим, что после перемещения ящиков, размер базы не изменился. Дело в том, что его полное удаление из базы произойдет после того, как пройдет количество дней, выставленное в параметре MailboxRetention. Посмотреть значение для каждой базы можно командой:
Get-MailboxDatabase | Select Name, MailboxRetention
Если мы не хотим ждать, меняем данное значение:
Set-MailboxDatabase -MailboxRetention ‘0.00:00:00’ -Identity ‘Base1’
После нужно сделать дефрагментацию базы. Несмотря на указание 0, нужно немного подождать применения настроек.
Удаление копии базы в DAG-группе
Данное действие не приведет к удалению самих файлов, имеющих отношение к базе. Если необходимо полностью очистить сервер от данных, после удаления копии базы, вручную удаляем ее файлы.
Сначала проверяем, что для базы отключено ведение циклического журнала. После можно переходить к удалению.
Графический интерфейс
Конфигурация организации — Почтовый ящик — вкладка Управление базой данных — выбрать базу и в нижней части окна удалить не подключенную копию:
и подтверждаем желаемое действие.
Powershell
Remove-MailboxDatabaseCopy -Identity Base1\Server1 -Confirm:$False
* где Base1 — имя базы; Server1 — имя сервера, на котором находится удаляемая копия.
Включение активной копии базы в DAG
В группе DAG только одна копия базы может быть активной. Таким образом, может возникнуть необходимость переключиться на другой сервер. Это делается в графическом интерфейсе или командной консоли Powershell.
Графический интерфейс
Конфигурация организации — Почтовый ящик — вкладка Управление базой данных — ставим указатель на нужную группу баз:
Ниже кликаем правой кнопкой по базе, которая находится на нужном нам сервере и выбираем Включить копию базы данных. :
В появившемся всплывающем окне выбираем параметр для автоматического переопределения активного сервера или оставляем в положении «Нет».
Powershell
Для смены активного сервера базы из группы DAG вводим:
Move-ActiveMailboxDatabase DB5 -ActivateOnServer SERVER15 -MountDialOverride:None -Confirm:$false
* где ActivateOnServer указываем на целевой сервер, на котором должна быть активирована копия базы; MountDialOverride — параметр для автоматического подключения базы (возможны варианты: None, Lossless, GoodAvailability, BestAvailability, BestEffort); Confirm — требование от администратора вводить подтверждение перемещения активной копии (необходимо отключать для скриптов). В данном примере мы перемещаем активную копию базы DB5 на сервер SERVER15 без переопределения автоматического переноса сервера; консоль не потребует подтвердить наши намерения.
Отключение или включение ведения циклического журнала
Графический интерфейс
Конфигурация организации — Почтовый ящик — вкладка Управление базой данных — кликаем правой кнопкой по нужной базе — Свойства:
На вкладке Обслуживание снимаем галочку Включить циклическое ведение журнала (или ставим, если нужно его включить):
Powershell
Set-MailboxDatabase -CircularLoggingEnabled $false -Identity ‘Base1’
Set-MailboxDatabase -CircularLoggingEnabled $true -Identity ‘Base1’
Ручное удаление файлов журанала
Данное действием может понадобиться для освобождения дискового пространства, которое занимается журналами.
Запускаем Exchange Management Shell. Переходим в каталог хранения базы данных, например:
cd C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1
* в данном примере подразумевается, что база находится в каталоге C:\Program Files\Microsoft\Exchange Server\V14\Mailbox\Base1.
Находим файл, в котором находится информация из контрольной точки фиксации журналов:
Результат будет, примерно, следующим:
Mode LastWriteTime Length Name
—- ————- —— —-
-a— 21.07.2019 11:18 8192 E05.chk
* в данном примере, нужный нам файл называется E05.chk.
Теперь узнаем последний файл журнала, действия из которого были занесены в базу Exchange:
eseutil /mk .\E05.chk
Мы получим информацию о фиксации журналов — нас интересует Checkpoint
.
LastFullBackupCheckpoint: (0x0,0,0)
Checkpoint: (0x 561299 ,8,16)
FullBackup: (0x0,0,0)
.
* в данном примере для нас важно значение 561299.
. теперь, когда мы получили значение Checkpoint, мы знаем имя файла, который был последним зафиксирован (его информация уже в базе данных). Находим в проводнике файл, в названии которого есть наше значение Checkpoint:
Теперь можно удалять все файлы журналов (их название начинается с E и это txt-файлы), которые старше найденного нами файла.
Переиндексация базы (восстановление поиска или репликации)
Данную процедуру необходимо выполнять, если наблюдаются проблемы с поиском в почте или репликации DAG-копии. Выполняется в Exchange Management Shell.
Одна копия базы
Переходим в каталог Exchange:
cd «\program files\microsoft\exchange server\v14\scripts»
При использовании DAG
Смотрим, у какой копии базы произошел сбой индекса:
Get-MailboxDatabaseCopyStatus -Identity DAG01 | Format-List Name, ContentIndexState
Name : DAG01\Server1
ContentIndexState : Failed
Name : DAG01\Server2
ContentIndexState : Healthy
Активируем копию базы на сервере с исправным индексом:
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server2 -MountDialOverride:None
Запускаем копирование каталога с исправного сервера:
Update-MailboxDatabaseCopy -Identity «DAG01\Server1» -SourceServer Server2 -CatalogOnly
Делаем активной копию базы на старом сервере:
Move-ActiveMailboxDatabase DAG01 -ActivateOnServer Server1 -MountDialOverride:None
Перенос отключенных почтовых ящиков между базами
В данном примере мы рассмотрим ситуацию, когда у нас есть база от старого или другого сервера exchange, и мы должны перенести из нее все почтовые ящики в новую базу. Предположим, что база DAG01 — старая база, а DAG02 — новая.
Получаем список отключенных почтовых ящиков:
Get-MailboxDatabase -Identity «DAG01» | Get-MailboxStatistics | where <$_.DisconnectReason>| ft DisplayName,Identity,DisconnectReason
Необходимо подключить почтовый ящик к существующему пользователю Active Directory без почтового ящика. Имя пользователя должно совпадать с именем почтового ящика, иначе почтовый ящик будет переименован:
Connect-Mailbox -Identity «ca97f561-9b0b-4a83-a177-6f6261bdaa8c» -Database «DAG01» -User «Иванов Иван Иванович»
* где identity — Identity или DisplayName почтового ящика; user — аккаунт или DisplayName пользователя домена.
Для подключения почтового ящика к пользователю имеющему почтовый ящик, необходимо сначала отключить его текущий почтовый ящик:
Disable-Mailbox -Identity «Иванов Иван Иванович»
Теперь можно перенести почтовый ящик в другую базу:
New-MoveRequest -Identity ivanov@test.local -TargetDatabase «DAG02» -ArchiveTargetDatabase «DAG02» -BadItemLimit 10
Для перемещения нескольких пользователей сразу необходимо создать задание на перемещение с указанием CVS файла содержащего имена пользователей:
Источник