Это третья часть цикла статей, посвященного процессу перемещения почтовых ящиков в одном лесу с помощью новой функции запроса перемещения в Exchange 2010. В первой и второй частях цикла мы немного поговорили об основах функции запроса перемещения и посмотрели, как создавать эти запросы с помощью консоли Exchange Management Console и оболочки Exchange Management Shell. Мы также рассмотрели свойства запроса перемещения, чтобы иметь возможность получить информацию о состоянии данного конкретного запроса перемещения. В этой части мы продолжим рассмотрение и поговорим об управлении запросами перемещения с помощью оболочки Exchange Management Shell.
Управление запросами перемещения
Оболочку Exchange Management Shell можно использовать для просмотра того, как продвигается запрос перемещения с помощью команды Get-MoveRequest. В своем стандартном состоянии команда Get-MoveRequest вернет результаты всех доступных запросов перемещения. Для примера посмотрите на рисунок 13, где показан образец информации, возвращенной командой Get-MoveRequest. Здесь показан только один запрос перемещения, а также видно, что мой почтовый ящик был перемещен в целевую базу данных под названием TEST. Вы также видите, что запрос перемещения завершен.
Увеличить
Рисунок 13: Результаты Get-MoveRequest
Как и в случае с командой New-MoveRequest, для этой команды тоже доступно множество параметров Get-MoveRequest. Полный список параметров можно найти здесь. Несколькими из самых важных параметров являются следующие:
MoveStatus: с помощью этого параметра вы можете использовать результаты команды Get-MoveRequest для получения запросов перемещения только с определенным состоянием. Например, если вам нужно просмотреть все запросы перемещения со статусом InProgress, нужно использовать следующую команду:
Get-MoveRequest 'MoveStatus InProgress
Пример результатов такой команды показан на рисунке 14. Действительными параметрами статуса будут None, Queued, InProgress, AutoSuspended, CompletionInProgress, Completed, CompletedWithWarning, Suspended и Failed.
Увеличить
Рисунок 14: Запросы перемещения с определенным статусом
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.
Увеличить
Рисунок 15: Приостановленный запрос перемещения ' Exchange Management Shell
Увеличить
Рисунок 16: Приостановленный запрос перемещения ' Exchange Management Console
Когда администратор решит, что можно завершить перемещение, запрос перемещения можно возобновить выполнением команды 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, где видно, что только один из двух почтовых ящиков вернулся, поскольку второй ящик был перемещен с использованием другого имена пакета.
Увеличить
Рисунок 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.
Рисунок 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.