在移动邮箱时,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脚本进行迁移前的准备
- 创建远程移动请求
移动前的准备工作
- 要进行跨组织邮箱移动,需要在源组织和目标组织所在的活动目录林直接创建双向的信任关系。
- 在Exchange Server 2010客户端访问服务器上,启用“邮箱移动代理”(MRSProxy)。方法是:
- 打开Exchange安装路径下的ClientAccessexchwebews子目录
- 双击web.config文件,用记事本打开
- 在记事本中,按Ctrl+F进行查找,查找的内容是<MRSProxyConfiguration
- 把IsEnable的值从false改为true
- 保存更改并关闭记事本
- 在命令行输入并运行IISRESET重启IIS服务
利用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%ADMTLogPassword.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 FilesMicrosoftExchange ServerV14Scripts” - 获取源域的管理员身份,在弹出的对话框中输入源域的管理员密码
$SourceCredential = Get-Credential ptcdemoadministrator
- 利用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 ptcdemoadministrator 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 ptcdemoadministrator 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进行迁移,导致组成员信息及组织架构信息丢失而导致的。 - 在目标域中检查准备情况
- 在Active Directory用户和计算机中,可以看到用户帐号。注意CEO帐号是通过Prepare-MoveRequest脚本直接创建的,该帐号被标记为禁用状态
- 在Exchange Management Shell中查看MailUser对象及属性
运行命令:Get-MailUser | Select Name,PrimarySmtpAddress
创建远程移动请求
远程移动请求可以通过Exchange Server 2010的Management Console图形界面来进行,也可以通过Management Shell命令行来进行。
使用EMC的方法:
- 从目标域的Exchange Management Console中连接到源域的Exchange组织上
- 在控制台根节点上点击右键,选择Add Exchange Forest…
- 输入源组织的友好名称(随意)以及源组织的Exchange服务器全路径,点击OK。在弹出的身份验证对话框中,输入源域的管理员信息进行连接。
- 管理控制台在重新加载后,就能够同时显示两个组织的信息了。
- 创建远程移动请求
- 在Exchange Management Console中,展开源组织,定位到需要进行移动的用户邮箱。选中后点击右键,选择”New Remote Move Request”
- 确认需要移动的邮箱信息
- 输入源域的Exchange服务器名称、源域管理员身份验证信息
- 输入目标域的SMTP域名、目标域的邮箱数据库名
- 复核移动请求信息
- 创建成功
- 从目标组织的移动请求节点中,可以查看到刚刚创建出的移动请求
- 移动完成后,删除已完成的移动请求。查看目标域的邮箱列表,这两个邮箱已经存在了
使用EMS创建移动请求
依次输入并运行以下命令,修改标记的部分:-
获取源域的管理员身份,在弹出的对话框中输入源域的管理员密码
$SourceCredential = Get-Credential ptcdemoadministrator -
创建远程移动请求
命令参数:参数名称 说明 示例 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-Credentialptcdemoadministrator 示例:
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 ptcdemoadministrator
cd “C:Program FilesMicrosoftExchange ServerV14Scripts”
Import-Csv C:UserListDN.csv | ForEach-Object {.Prepare-MoveRequest.ps1 -Identity $_.DistinguishedName -RemoteForestDomainController ptcdc.ptcdemo.com -RemoteForestCredential $SourceCredential -UseLocalObject} - 对于没有进行ADMT导入的用户,使用下面的命令,替换标记的部分:
$SourceCredential = Get-Credential ptcdemoadministrator
cd “C:Program FilesMicrosoftExchange ServerV14Scripts”
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 ptcdemoadministrator
Import-Csv Z:UserListMail.csv | ForEach-Object {New-MoveRequest -Identity $_.UPN -Remote -TargetDeliveryDomain pcoe.com -RemoteHostName ptcexch.ptcdemo.com -TargetDatabase DB#3 -RemoteCredential $SourceCredential}
- 在源组织的服务器上,打开Exchange Management Shell,运行以下命令:
-
- 在Exchange Management Console中,展开源组织,定位到需要进行移动的用户邮箱。选中后点击右键,选择”New Remote Move Request”
- 在控制台根节点上点击右键,选择Add Exchange Forest…
- 从目标域的Exchange Management Console中连接到源域的Exchange组织上
- 在Active Directory用户和计算机中,可以看到用户帐号。注意CEO帐号是通过Prepare-MoveRequest脚本直接创建的,该帐号被标记为禁用状态
- 在目标域中已经存在用户帐号的情况下,即:使用过ADMT工具时
- 转到Exchange安装路径的Scripts子目录下
- 从以下位置下载ADMT 3.2工具,并进行安装,可以是两个林中的任意一台机器:
- 要进行跨组织邮箱移动,需要在源组织和目标组织所在的活动目录林直接创建双向的信任关系。