在移动邮箱时,Exchange Server 2010取消了Exchange Server 2007所使用的Move-Mailbox方式,而推出了全新的“邮箱移动请求”(Move Request)方式来进行。Exchange Server 2010支持在线邮箱移动,也就是说,即使用户正在通过客户端软件,如Outlook/OWA等连接到邮箱,Exchange Server 2010依然可以进行邮箱的移动。
Move Request分为两种,本地Local和远程Remote。本地邮箱移动指的是在Exchange组织内部进行邮箱移动;远程模式指的是跨Exchange组织进行邮箱移动,也称为跨林移动。本文将要讨论的是跨林移动的配置方式。
进行跨组织邮箱移动,就牵涉到Exchange的版本问题,跨组织移动可以在两个Exchange Server 2010组织间进行,也可以在Exchange Server 2010与旧版Exchange服务器(Exchange 2003/2007)之间进行。
在Exchange Server 2010与旧版Exchange服务器之间进行跨组织移动时,有两种方式:一种是在旧版组织中加入一台Exchange Server 2010的客户端访问服务器;另一种是在创建移动请求时,使用专门的配置信息。
完整的用户帐号+用户邮箱的迁移分了4个步骤:
- 使用ADMT迁移用户帐号
- 为迁移的用户帐号启用Mail User功能,并设置ExternalEmailAddress
前面的两个步骤并不是必须的,但是从保留账号信息完整性(包括组织架构、组成员信息等等)的角度考虑,建议不要省略这两个步骤。 - 调用Prepare-MoveRequest脚本进行迁移前的准备
- 创建远程移动请求
移动前的准备工作
利用ADMT迁移用户帐号
对于在两个Exchange Server 2010组织之间移动邮箱的情况,这一步并非必须的。对于从旧版服务器向Exchange Server 2010进行跨林迁移,就需要先使用ADMT进行用户帐号迁移了。
其实对于两个Exchange 2010组织的情况,也建议先使用ADMT进行用户帐号迁移。这样做的好处是,可以指定用于存放用户帐号的容器位置(如果直接使用Move Request,迁移过去的帐号会放到活动目录的Users容器中,并且设为Disable状态);另外,使用ADMT可以保留用户的组信息,这对于大型组织来说,也是十分必要的。
- 从以下位置下载ADMT 3.2工具,并进行安装,可以是两个林中的任意一台机器:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=20c0db45-db16-4d10-99f2-539b7277ccdb - 安装结束后,启动ADMT工具
- 在控制台根节点点击右键,选择User Account Migration Wizard

- 欢迎界面,点击Next

- 选择源域和目标域,并指定要连接的域控制器

- 选择“Select users from domain”

- 点击Add进行用户帐号的选择,选择结束后,点击Next继续

- 选择目标域用于存放用户帐号的容器

- 选择密码设置规则

- 设置帐号迁移选项

- 选择要迁移的内容

- 选择要排除的活动目录属性

- 设置出现冲突时的处理方式

- 设置完成,点击Finish开始迁移

- 迁移成功完成

- 从目标域中检查导入情况

- 导入后,用户在目标域的初始密码可以从运行ADMT的机器上找到,位置是:%SYSTEMROOT%\ADMT\Log\Password.txt文件

为迁移来的用户启用Mail User功能
如果前面没有使用ADMT进行用户帐号迁移,这一步就无须进行,可以直接跳到下面的移动准备部分。对于已经利用ADMT迁移过来的用户帐号,必须进行启用Mail User的操作,否则,在后面进行迁移准备时,会自动再创建一个用户帐号出来。
请注意,本节中使用的命令都是用于单个用户/邮箱的,用于逐步验证命令结果。如果需要批量进行操作,请查看后续章节。实际操作时,也建议先对单个用户帐号/邮箱进行处理,获得正确的参数信息后,再进行批量操作。
- 在目标域的服务器上,启动Exchange Management Shell
- 运行命令,修改标记的部分:
Enable-MailUser –Identity Sales3 –ExternalEmailAddress Sales3@ptcdemo.com
- 为所有迁移过来的用户帐号重复上面的操作。
为源邮箱进行移动准备
需要为源邮箱进行准备,添加相应的AD属性,以便进行迁移,这个工作需要在目标域中进行。这个步骤根据是否进行了ADMT迁移而有所不同。
在目标域的服务器上,打开Exchange Management Shell,依次输入并运行以下命令,修改标记的部分:
- 转到Exchange安装路径的Scripts子目录下
cd “C:\Program Files\Microsoft\Exchange Server\V14\Scripts” - 获取源域的管理员身份,在弹出的对话框中输入源域的管理员密码
$SourceCredential = Get-Credential ptcdemo\administrator
- 利用Prepare-MoveRequest.ps1脚本进行迁移前的准备。
这里又分为两种情况:- 在目标域中已经存在用户帐号的情况下,即:使用过ADMT工具时
命令参数:
参数名称 说明 示例 Identity 用户在源域的标识,由于在目标域·已经存在同名同邮件地址的对象,因此只能使用AD路径(DistinguishedName) CN=Sales 3,OU=Staff,OU=Users,OU=PTCDemoOrg,DC=ptcdemo,DC=com
RemoteForestDomainController 源域的域控制器 ptcdc.ptcdemo.com RemoteForestCredential 源域的管理员身份信息 Get-Credential ptcdemo\administrator UseLocalObject 是否使用本地帐号的开关 示例:
.\Prepare-MoveRequest.ps1 -Identity “CN=Sales 3,OU=Staff,OU=Users,OU=PTCDemoOrg,DC=ptcdemo,DC=com”-RemoteForestDomainController ptcdc.ptcdemo.com –RemoteForestCredential $SourceCredential –UseLocalObject
- 如果没有使用ADMT迁移用户帐号,即:直接进行邮箱移动准备
命令参数:
参数名称 说明 示例 Identity 用户在源域的身份标识,可以使用
1、AD路径(DistinguishedName)
2、用户的UPN
3、邮件地址
4、显示名称
5、objectGuid1、CN=CEO,OU=Users,OU=PTCDemoOrg,DC=ptcdemo,DC=com
2、CEO@ptcdemo.com
3、CEO@ptcdemo.com
4、CEO
5、aa92cf69-7d1e-46c6-8965-5371fed6c6eeRemoteForestDomainController 源域的域控制器 ptcdc.ptcdemo.com RemoteForestCredential 源域的管理员身份信息 Get-Credential ptcdemo\administrator TargetMailUserOU 目标域中用于存放用户帐号的容器。如果未指定,将放到Users里 OU=ADSync,DC=PCOE,DC=com 示例:
.\Prepare-MoveRequest.ps1 -Identity “CN=CEO,OU=Users,OU=PTCDemoOrg,DC=ptcdemo,DC=com” –RemoteForestDomainController ptcdc.ptcdemo.com -RemoteForestCredential $SourceCredential –TargetMailUserOU “OU=ADSync,DC=PCOE,DC=com”
看一下上面的运行结果,有多个警告信息,这就是由于该帐号没有通过ADMT进行迁移,导致组成员信息及组织架构信息丢失而导致的。 - 在目标域中检查准备情况
- 在目标域中已经存在用户帐号的情况下,即:使用过ADMT工具时
创建远程移动请求
远程移动请求可以通过Exchange Server 2010的Management Console图形界面来进行,也可以通过Management Shell命令行来进行。
使用EMC的方法:
- 从目标域的Exchange Management Console中连接到源域的Exchange组织上
- 创建远程移动请求
使用EMS创建移动请求
依次输入并运行以下命令,修改标记的部分:
-
获取源域的管理员身份,在弹出的对话框中输入源域的管理员密码
$SourceCredential = Get-Credential ptcdemo\administrator -
创建远程移动请求
命令参数:参数名称 说明 示例 Identity 用户在目标域的AD路径(DistinguishedName) CN=Sales 3,OU=ADSync,DC=PCOE,DC=com Remote 远程移动请求的开关 如果是从旧版服务器迁移,需要使用RemoteLegacy开关 TargetDeliveryDomain 目标Exchange组织的SMTP域名 pcoe.com RemoteHostName 源域的Exchange服务器名称(FQDN) ptcexch.ptcdemo.com TargetDatabase 目标Exchange组织中的邮箱数据库 DB#2 RemoteForestCredential 源域的管理员身份信息 Get-Credentialptcdemo\administrator 示例:
New-MoveRequest -Identity “CN=Sales 3,OU=ADSync,DC=PCOE,DC=com” -Remote -TargetDeliveryDomain pcoe.com -RemoteHostName ptcexch.ptcdemo.com -TargetDatabase DB#2 -RemoteCredential $SourceCredential
-
同样,可以从目标组织的移动请求节点中看到这个新建的移动请求。
当远程移动请求完成工作后,查看源组织,这些邮箱已经不再存在了,而用户所对应的是Mail User类别,不再是Mailbox了。
实现对邮箱移动的批量处理
根据前面描述的步骤,完整的用户帐号+用户邮箱的迁移分了4个步骤:
- 使用ADMT迁移用户帐号
- 为迁移的用户帐号启用Mail User功能,并设置ExternalEmailAddress
- 调用Prepare-MoveRequest脚本进行迁移前的准备
- 创建远程移动请求
这4个步骤中,第1步ADMT可以批量处理,第4步可以利用Exchange Management Console进行批量处理,因此需要考虑的是第2步和第3步的批量处理方式。
回顾启用Mail User的步骤,该步骤使用的命令是:
Enable-MailUser –Identity Sales3 –ExternalEmailAddress Sales3@ptcdemo.com
这里面用到了两个参数,用户的身份标识、用户的外部邮件地址。要进行批量处理,就必须先获取所有用户的这两个数据。获取这些数据,有两种方法,EMC或EMS。
使用Exchange Management Shell批量获取用户信息
- 在源组织的服务器上,打开Exchange Management Shell,运行以下命令:
Get-Mailbox -Database MBX#2 | select sAMAccountName,WindowsEmailAddress | Export-Csv C:\PTCDemoUserList.csv
其中的-Database MBX#2相当于一个过滤器,表示只筛选邮箱位于MBX#2上的用户;
Export-Csv C:\PTCDemoUserList.csv是将命令运行的结果保存到指定的文件中。

- 利用记事本打开输出文件,看到的是以下内容

利用Exchange Management Console批量获取用户信息
- 从Exchange Management Console中,定位到用户邮箱
- 点击右边操作栏的菜单View=>Add/Remove Columns

- 在Add/Remove Columns对话框中,只选择3项:Display Name,Alias,Primary SMTP Address,点击OK

- 在中间的结果栏中,创建过滤器,只选择需要进行操作的用户邮箱

- 点击右边操作栏的Export List选项,并指定文件格式与名称,保存信息。

- 用记事本打开导出的文件

- 更改第一行中带有空格的属性名称,保存后关闭

批量启用Mail User功能
这个步骤只能在命令行中进行。先将前面所获取的CSV文件复制到目标域的服务器上,然后从目标域的服务器打开Exchange Management Shell。
对于通过命令行获取的文件PTCDemoUserList.csv,其属性名称为sAMAccountName和WindowsEmailAddress,对应的导入命令为:
Import-Csv C:\PTCDemoUserList.csv | ForEach-Object {Enable-MailUser -Identity $_.SamAccountName -ExternalEmailAddress $_.WindowsEmailAddress}
对于通过UI获取的文件ExportFromUI.csv,其属性名称为Alias和EMail,对应的导入命令为:
Import-Csv C:\ExportFromUI.csv | ForEach-Object {Enable-MailUser -Identity $_.Alias -ExternalEmailAddress $_.Email}
批量进行邮箱移动准备
进行邮箱移动准备时,需要专门为每个指定的参数是用户在源林的身份标识,这个身份标识可以使用DistinguishedName。要批量获取用户的DistinguishedName,只能通过Exchange Management Shell来完成。
- 在源组织中,打开Exchange Management Shell
- 运行命令
Get-Mailbox -Database MBX#2 | select DistinguishedName > C:\UserListDN.csv
- 利用记事本打开前面保存的文件,编辑为以下格式

- 将UserListDN.csv文件复制到目标域的服务器上,然后从目标域的服务器打开Exchange Management Shell。
- 对于通过ADMT导入并启用了Mail User功能的用户,使用下面的命令,替换标记的部分,可以把这3条命名保存为PS1脚本文件运行。:
$SourceCredential = Get-Credential ptcdemo\administrator
cd “C:\Program Files\Microsoft\Exchange Server\V14\Scripts”
Import-Csv C:\UserListDN.csv | ForEach-Object {.\Prepare-MoveRequest.ps1 -Identity $_.DistinguishedName -RemoteForestDomainController ptcdc.ptcdemo.com -RemoteForestCredential $SourceCredential -UseLocalObject}
- 对于没有进行ADMT导入的用户,使用下面的命令,替换标记的部分:
$SourceCredential = Get-Credential ptcdemo\administrator
cd “C:\Program Files\Microsoft\Exchange Server\V14\Scripts”
Import-Csv C:\UserListDN.csv | ForEach-Object {.\Prepare-MoveRequest.ps1 -Identity $_.DistinguishedName -RemoteForestDomainController ptcdc.ptcdemo.com -RemoteForestCredential $SourceCredential}
批量创建邮箱移动请求
邮箱移动请求可以通过图形界面的Management Console批量创建,要通过命令行进行,可以利用前面获取的源组织用户信息CSV文件进行。
在目标组织的服务器上,打开Exchange Management Shell,运行下面的命令,替换标记的部分:
$SourceCredential = Get-Credential ptcdemo\administrator
Import-Csv Z:\UserListMail.csv | ForEach-Object {New-MoveRequest -Identity $_.UPN -Remote -TargetDeliveryDomain pcoe.com -RemoteHostName ptcexch.ptcdemo.com -TargetDatabase DB#3 -RemoteCredential $SourceCredential}


















