管理迁移请求
使用Get-MoveRequest命令可以了解迁移请求的处理情况。默认状态下,该命令将返回当前可用的所有迁移请求。举例说明,图13即为Get-MoveRequest命令返回的信息。从图中可以看到,当前只有一个迁移请求可用,示例邮箱已经移动到命名为TEST的目标数据库,并且该请求已经完成。
图 13: Get-MoveRequest命令的返回结果
同前面讲到的New-MoveRequest命令一样,Get-MoveRequest也有很多参数,参数的完整列表见微软官网(http://technet.microsoft.com/en-us/library/dd335227.aspx)。本文仅介绍其中几个重要参数:
迁移状态(MoveStatus):使用此参数,可以改进Get-MoveRequest命令的输出,使其仅返回特定状态的迁移请求。例如,如果只想查询“办理中”(InProgress)状态的迁移请求,可以运行如下命令:
Get-MoveRequest –MoveStatus InProgress
本例的输出结果如图14所示。合法的参数包括:无(None)、排队(Queued)、 办理中(InProgress)、自动挂起(AutoSuspended)、已完成(Completed)及失败(Failed)等等。
图14:指定状态的迁移请求
源数据库(SourceDatabase):该参数显示所有正从一个特定源数据库移动的邮箱,因此对确定源邮箱服务器的负载非常有用。
准备结束时挂起(SuspendWhenReadyToComplete):该参数用来在邮箱最终到达目标数据库前暂停邮箱迁移。后面文章中还要讲到这个参数。
目标数据库(TargetDatabase):类似源数据库参数。
迁移请求挂起
如前面文章所述,带有SuspendWhenReadyToComplete参数的New-MoveRequest 和Get-MoveRequest命令用于在最终目标数据库位置更新前暂停迁移请求。利用这个方法,一旦恢复挂起的迁移请求,邮箱数据就开始迁移,但不进行最后的状态转换。同理,也可以用Suspend-MoveRequest命令挂起已存在的迁移请求。
一个使用SuspendWhenReadyToComplete参数的New-MoveRequest命令,代码实现如下:
New-MoveRequest –Identity neil –SuspendWhenReadyToComplete
稍加注意就会发现,上述命令未使用TargetDatabase参数来指定任何特定的数据库。如果不设置这个参数,邮箱数据库将由系统选定。
如前所述,在最终的转换发生之前,邮箱迁移过程会被挂起。可以通过运行Get-MoveRequest cmdlet命令加以确认。在图15中,我们可以看到,通过使用SuspendWhenReadyToComplete参数,邮箱已经被迁移。随即,迁移请求的状态即变为InProgress,也就是说邮箱内容正在迁移过程中。使用SuspendWhenReadyToComplete参数后,再运行Get-MoveRequest命令刷新,这时迁移请求的状态变为“自动挂起” (AutoSuspended)。与此相对应,利用Exchange管理控制台查看,显示结果也如此,参见图16。
图 15: 迁移请求挂起( Exchange命令行管理程序)
图 16: 迁移请求挂起( Exchange管理控制台)
如果邮箱迁移全部完成,管理员可使用如下命令重新恢复迁移请求:
Resume-MoveRequest –Identity neil
此命令一旦执行,重新运行Get-MoveRequest命令,迁移请求状态即显示为“完成”。
批量命名
前面文章已经提到,New-MoveRequest命令有一个参数,称为“批量命名”(BatchName)。在迁移多个邮箱时,先用Get-MoveRequest命令成批次地搜索特定的待迁移邮箱,然后使用该参数对指定某一名称的邮箱进行批量操作。
通常情况下,将一个邮箱数据库的内容整体迁移到另一个数据库时,适用批量命名功能。为简便起见,我们为一个邮箱创建两个迁移请求,并为这两个迁移请求分别指定一个不同的批量名称。然后,使用Get-MoveRequest命令来验证批量名称是否可以搜索到。
首先,用Exchange命令行管理程序创建两个简单的迁移请求,并指定不同的批量名称。实现如下:
New-MoveRequest –Identity neil –TargetDatabase ‘Mailbox Database 003’ –BatchName Batch001
New-MoveRequest –Identity rob –TargetDatabase ‘Mailbox Database 004’ –BatchName Batch002
创建完成后,使用带有BatchName参数的Get-MoveRequest命令来查找与已确定批量名称相关联的邮箱迁移请求。例如,要查看所有与Batch001相关联的邮箱迁移请求,可用如下命令:
Get-MoveRequest –BatchName Batch001
图17中,只返回了一个邮箱,这是因为另一个邮箱使用了不同的批量名称。
图 17: 批量名称过滤
多邮箱迁移
前面的文章讲到了使用New-MoveRequest命令迁移单个邮箱。由于单个邮箱的别名只需传递给New-MoveRequest命令的Identity参数,因此迁移单个邮箱相对简单。多邮箱迁移可以通过各种不同的方法实现,这里作一简单概述。
首先,将所有邮箱从一个数据库全部迁移到另一个数据库很容易实现,只需把Get-MailboxDatabase命令的结果通过管道(Pipe)技术输出到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的数组,这个数组包含上述3个待迁移的邮箱名称。然后,每个邮箱名称分别提交给New-MoveRequest命令进行处理,而并不区分邮箱的源数据库。
同样,也可以使用PowerShell的Get-Content命令。首先,创建一个包含待迁移邮箱名称的文本文件。图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命令。
在本系列文章的第四部分,我们还将推出更多实现多邮箱迁移的方法。
结语
这部分内容主要讲述了如何管理迁移请求以及如何挂起请求。在后续的第四部分中,我们将了解Exchange 2010提供的邮箱迁移脚本。