天天看点

Exchange迁移邮箱

$user = "[email protected]"
$mdb = "maildbname"

#迁移[email protected]的邮箱到邮箱数据库maildbname
New-MoveRequest -Identity $user -TargetDatabase $mdb

#查看用户邮箱 $user 迁移状态
Get-MoveRequestStatistics -Identity $user 

#删除已迁移完成的 迁移请求
Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest -Confirm:$false

#获取未迁移完成的 迁移请求
Get-MoveRequest | ? {$_.Status -ne "Completed"}

#删除用户 $user 的迁移请求
Get-MoveRequest $user      
#定义导出的邮箱数据库名称存储的文件路径
$file_mailDB = "D:\operations\TEMP\maidbs.txt"
#定义用户邮箱信息所存储的文件路径、迁移错误日志文件路径
$file = "D:\operations\TEMP\mailboxes.csv"
$file_err = "D:\operations\TEMP\migrate_error.txt"

#导出邮箱数据库名称到文件
$dbs = Get-MailboxDatabase
foreach ($db in $dbs)
    { $db.Name |Out-File $file_mailDB -Encoding Default -Append }



#从邮箱数据库导出用户邮箱,先编辑上一步导出的邮箱数据库名称文件,将不需要导出用户邮箱的数据库名称删掉,保存后再执行下面内容
$dbss = gc $file_mailDB
foreach ($dbname in $dbss)
    {
    $mbs = Get-Mailbox -Database $dbname
    $mbs |select PrimarySmtpAddress |Export-Csv $file -NoTypeInformation -Encoding Default -Append
    }



#导入需要迁移的用户邮箱信息
$dusers2 = Import-Csv $file -Encoding Default
$dus = $dusers2.PrimarySmtpAddress

#定义迁移的目标数据库
$mdb_target = "VIP08"  

#定义邮箱数据库的默认用户邮箱大小
$mb_default_size = 5GB

#表示迁移第1-11个用户邮箱
$dus = $dus[0..10]   #[11..100]则表示第11-101个用户邮箱

#开始迁移用户邮箱,迁移请求失败则会记录其邮箱地址到错误日志中
foreach ($user in $dus)  
    {
    $user
    If ( (Get-MailboxStatistics $user).TotalItemSize.Value -gt $mb_default_size )
    {
        Set-Mailbox $user -UseDatabaseQuotaDefaults $false
        Start-Sleep 15
    }
try{
    New-MoveRequest -Identity $user -TargetDatabase $mdb }
catch {
    write-host $user -ForegroundColor Red
    $user |out-file $file_err -Append
    $_.exception.message
}

    }



#待用户邮箱迁移完成后再运行下面脚本,迁移系统邮箱
#下面脚本只是获取系统邮箱,数量很少,获取到后,用New-MoveRequest命令单独迁移即可
$dbs = Get-MailboxDatabase
foreach ($db in $dbs)
{
$mbn = $db.Name
Get-Mailbox -Database $mbn -Archive
Get-Mailbox -Database $mbn -PublicFolder
Get-Mailbox -Database $mbn -Arbitration
Get-Mailbox -Database $mbn -AuditLog
}