Если вы хотите прочитать предыдущие части этого цикла статей, перейдите по ссылкам
- Перемещение почтовых ящиков в Exchange 2010 (часть 1)
- Перемещение почтовых ящиков в Exchange 2010 (часть 2)
Введение
Это третья часть цикла статей, посвященного процессу перемещения почтовых ящиков в одном лесу с помощью новой функции запроса перемещения в Exchange 2010. В первой и второй частях цикла мы немного поговорили об основах функции запроса перемещения и посмотрели, как создавать эти запросы с помощью консоли Exchange Management Console и оболочки Exchange Management Shell. Мы также рассмотрели свойства запроса перемещения, чтобы иметь возможность получить информацию о состоянии данного конкретного запроса перемещения. В этой части мы продолжим рассмотрение и поговорим об управлении запросами перемещения с помощью оболочки Exchange Management Shell.
Управление запросами перемещения
Оболочку Exchange Management Shell можно использовать для просмотра того, как продвигается запрос перемещения с помощью команды Get-MoveRequest. В своем стандартном состоянии команда Get-MoveRequest вернет результаты всех доступных запросов перемещения. Для примера посмотрите на рисунок 13, где показан образец информации, возвращенной командой Get-MoveRequest. Здесь показан только один запрос перемещения, а также видно, что мой почтовый ящик был перемещен в целевую базу данных под названием TEST. Вы также видите, что запрос перемещения завершен.
Как и в случае с командой New-MoveRequest, для этой команды тоже доступно множество параметров Get-MoveRequest. Полный список параметров можно найти здесь. Несколькими из самых важных параметров являются следующие:
MoveStatus: с помощью этого параметра вы можете использовать результаты команды Get-MoveRequest для получения запросов перемещения только с определенным состоянием. Например, если вам нужно просмотреть все запросы перемещения со статусом InProgress, нужно использовать следующую команду:
Get-MoveRequest 'MoveStatus InProgress
Пример результатов такой команды показан на рисунке 14. Действительными параметрами статуса будут None, Queued, InProgress, AutoSuspended, CompletionInProgress, Completed, CompletedWithWarning, Suspended и Failed.
SourceDatabase: этот параметр показывает все почтовые ящики, которые перемещаются из определенной исходной базы данных, поэтому он полезен для определения нагрузки на исходный сервер почтовых ящиков.
SuspendWhenReadyToComplete: этот параметр используется для приостановки запросов перемещения, прежде чем ящик будет окончательно перемещен в целевую базу данных. Об этом параметре мы поговорим чуть позже.
TargetDatabase: этот параметр похож на SourceDatabase за исключением того, что он показывает целевую базу.
Приостановка запроса перемещения
Как мы вкратце рассмотрели во второй части этого цикла и в предыдущем разделе, команды New-MoveRequest и Get-MoveRequest включают SuspendWhenReadyToComplete параметр, который используется для приостановки запроса перемещения, прежде чем окончательное место целевой базы данных будет обновлено. С таким подходом данные почтового ящика перемещаются, однако последнее переключение осуществляется только после того, как приостановленный запрос перемещения снова запущен. Также можно приостановить существующий запрос перемещения с помощью команды Suspend-MoveRequest.
Давайте рассмотрим использование параметра SuspendWhenReadyToComplete для команды New-MoveRequest. Примером команды для выполнения будет:
New-MoveRequest 'Identity neil 'SuspendWhenReadyToComplete
Если вы читали предыдущие части этого цикла, вы заметите, что вышеуказанная команда не включает параметр TargetDatabase для указания какой-либо определенной базы данных, в которую будет перемещен ящик. Без этого параметра база данных будет выбрана системой.
Как мы уже говорили, процесс перемещения почтового ящика будет отложен, пока не произойдет окончательное перемещение. Его можно настроить с помощью выполнения команды Get-MoveRequest. Взгляните на рисунок 15, где видно, что почтовый ящик был перемещен с использованием параметра SuspendWhenReadyToComplete. Немногим позже статус этого запроса перемещения примет значение InProgress, и содержимое почтового ящика перемещается. После очередного обновления команда Get-MoveRequest покажет, что статус запроса теперь изменился на AutoSuspended, а именно такой статус отображается при использовании параметра SuspendWhenReadyToComplete. Подобно этому консоль Exchange Management Console показывает этот статус, как видно на рисунке 16.
Когда администратор решит, что можно завершить перемещение, запрос перемещения можно возобновить выполнением команды Resume-MoveRequest со следующим синтаксисом:
Resume-MoveRequest 'Identity neil
Когда эта команда выполнена, повторный запуск команды Get-MoveRequest должен показать статус Completed.
Пакетные имена (Batch Names)
В предыдущей части этого цикла мы рассмотрели параметры команды New-MoveRequest и увидели, что один из этих параметров называется BatchName. С помощью этого параметра можно указывать имя пакета при перемещении нескольких почтовых ящиков, которое затем можно использовать с командой Get-MoveRequest для поиска определенных пакетов перемещения почтовых ящиков.
Имена пакетов вполне полезны при перемещении содержимого одной базы почтовых ящиков в другую. Чтобы все упростить, я просто создам два запроса для одинаковых почтовых ящиков и назначу каждому различные имена пакетов. Затем мы воспользуемся командой Get-MoveRequest, чтобы продемонстрировать, как искать эти имена пакетов. Сначала, давайте создадим два простых запроса перемещения с помощью оболочки Exchange Management Shell с указанием разных имен пакетов:
New-MoveRequest 'Identity neil 'TargetDatabase 'Mailbox Database 003' 'BatchName Batch001
New-MoveRequest 'Identity rob 'TargetDatabase 'Mailbox Database 004' 'BatchName Batch002
После создания этих запросов перемещения можно использовать команду Get-MoveRequest с BatchName параметром для обнаружения всех запросов перемещения почтовых ящиков, связанных с определенным именем пакета. Например, чтобы посмотреть все запросы перемещения почтовых ящиков, связанные с именем пакета Batch001, нужно воспользоваться следующей командой:
Get-MoveRequest 'BatchName Batch001
Результаты этой команды показаны на рисунке 17, где видно, что только один из двух почтовых ящиков вернулся, поскольку второй ящик был перемещен с использованием другого имена пакета.
Перемещение нескольких почтовых ящиков
Во второй части этого цикла мы рассмотрели перемещение пользовательского почтового ящика с помощью команды New-MoveRequest. Перемещение одного почтового ящика является простой задачей, поскольку псевдоним этого ящика просто нужно указать в параметре Identity команды New-MoveRequest. А как на счет перемещения нескольких почтовых ящиков? Это можно сделать несколькими способами, некоторые из которых будут описаны ниже.
Во-первых, довольно просто переместить все почтовые ящики из одной базы данных в другую просто путем передачи команды Get-MailboxDatabase в команду New-MoveRequest. Примером может служить следующая команда:
Get-Mailbox 'Database 'Mailbox Database 001' | New-MoveRequest 'TargetDatabase `
'Mailbox Database 002'
Если вам нужно переместить всего несколько почтовых ящиков, вы можете воспользоваться функцией массива в PowerShell. Предположим, что нам нужно переместить почтовые ящики, принадлежащие пользователям Neil, Rob и Mark. В этом примере имена пользователей также являются псевдонимами почтовых ящиков. Можно воспользоваться следующим сценарием для выполнения этой задачи:
$MailboxesToMove = 'neil','rob','mark'
ForEach ($SingleMailbox in $MailboxesToMove) {New-MoveRequest 'Identity $SingleMailbox `
'TargetDatabase 'Mailbox Database 002' 'BatchName Batch001}
В этом сценарии видно, что мы сначала определили $MailboxesToMove как массив, содержащий имена трех псевдонимов почтовых ящиков для перемещения. Затем каждый псевдоним почтовых ящиков передается в команду New-MoveRequest для обработки независимо от расположения исходной базы данных почтовых ящиков.
Также можно воспользоваться командой Get-Content, имеющейся в PowerShell. Прежде всего, нужно создать простой текстовый файл, содержащий список псевдонимов почтовых ящиков, которые вы собираетесь переместить. На рисунке 18 показан пример такого файла, это файл под названием mailboxes.txt.
Затем примерный сценарий для перемещения почтовых ящиков, перечисленных в файле mailboxes.txt, может выглядеть следующим образом:
$Mailboxes = Get-Content ./mailboxes.txt
For ($Start = 0; $Start -lt $Mailboxes.length; $Start++) {New-MoveRequest 'Identity `
$Mailboxes[$Start] -TargetDatabase 'Mailbox Database 002'}
В этом сценарии команда Get-Content используется для получения содержимого mailboxes.txt файла и назначения содержимого для $Mailboxes. Затем выполняется петля через содержимое $Mailboxes и для каждой петли используется команда New-MoveRequest.
Мы рассмотрим дополнительные способы перемещения нескольких почтовых в следующей части этого цикла статей.
Заключение
На этом закончим третью часть нашего цикла статей о локальных запросах перемещения. В этой части мы рассмотрели, как управлять запросами перемещения, включая то, как их приостанавливать. Мы также начали рассмотрение того, как перемещать несколько почтовых ящиков, и об этом продолжим говорить в следующей части, но на этот раз мы рассмотрим сценарий MoveMailbox, поставляемый в Exchange 2010.
Если вы хотите прочитать предыдущие части этого цикла статей, перейдите по ссылкам
- Перемещение почтовых ящиков в Exchange 2010 (часть 1)
- Перемещение почтовых ящиков в Exchange 2010 (часть 2)