当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 迁移到 Exchange Online

作者:精品下载站 日期:2024-12-14 08:11:28 浏览:16 分类:玩电脑

使用 PowerShell 迁移到 Exchange Online


[玩转系统] 使用 PowerShell 迁移到 Exchange Online

将邮箱从 Exchange 迁移到 Exchange Online 的处理方式有两种:使用 Exchange 管理中心的 Web 界面或使用 PowerShell 通过脚本或单行代码运行迁移。这两种方法都适合该目的,并且大多数迁移都可以与这两种方法完美配合。

虽然这可能是真的,但微软已经设置了一些限制,可以为某些迁移带来次一流的体验。例如,Exchange 管理中心中的迁移批次限制为 100,对于大型迁移,此限制可能会受到限制,具体取决于批次的管理方式。除此之外,管理中心有时会出现相对不一致的体验,使用 PowerShell 处理迁移对于管理员来说可能更加高效且响应迅速。在这个由两部分组成的博客系列中,我们将介绍如何从头到尾处理迁移,包括一些先决条件检查和报告。

先决条件检查

将邮箱移动到 Exchange Online 可能就像启动邮箱的新迁移一样简单,但是,对于某些组织来说,旧配置或设置可能会导致邮箱移动请求失败。我们正在讨论的电子邮件域可能构成邮箱上不再需要的代理地址,未在 Exchange 中定义为接受域或在 Exchange Online 中配置。

可以执行的另一项检查是邮箱的用户主体名称 (UPN) 和主 SMTP 地址的对齐,因为 Microsoft 的指导是这两个值应该匹配。其中每一个都可能成为行动的障碍。

此外,保留政策和诉讼保留可能会使迁移过程变得复杂。其中每一个都可以在迁移前进行记录,并在迁移后经过一些深思熟虑进行配置。由于 Exchange Online 的邮件大小限制为 150 MB,因此大型电子邮件还会导致迁移邮箱感到心痛。

用于迁移的 PowerShell 脚本

在处理小型或大型邮箱迁移时,最好以这样的方式进行批处理:用户不会遇到权限问题,IT 人员可以在迁移后的第二天提供适当的支持,并且管理员可以有效地跟踪所有迁移在飞行中。

使用包含邮箱移动列表的 CSV 文件既可以控制要移动的邮箱的大小,又可以为管理员提供易于跟踪的参考集。例如,假设我们要批量移动 25 到 50 个邮箱,这些保存为 CSV 文件的批处理文件可以包含“PrimarySMTPAddress”的单个标头,然后是要移动的邮箱电子邮件地址列表,如下所示:

[email protected]@scriptrunner.com

预检查

1.UPN匹配

在此检查中,我们采用 CSV 文件中提供的 SMTP 地址,查询邮箱的 UPN 并比较两个值。如果不匹配,我们可以将其导出到文件或将它们显示到屏幕上,甚至两者都执行。日志文件是理想的选择,因为我们稍后可以参考该文件。在下面的代码示例中,我们查找这一点,并将任何不匹配项存储在文件中以供以后分析。

$CSV = Import-CSV batch1.csvForeach ($Line in $CSV) {$PrimarySMTPAddress = $Line.PrimarySMTPAddress$UPN = (Get-Mailbox $PrimarySMTPAddress).UserPrincipalNameIf ($PrimarySMTPAddress -ne $UPN) {$Output = "The mailbox $PrimarySMTPAddress does not have a matching UPN and is set to $UPN." | Out-File -File $LogDestination -Append}}

一个经常被问到的问题是“为什么我们要将 UPN 与用户的主 SMTP 地址相匹配? ”。简而言之,我们遵循 Microsoft 自己的建议,以获得更好的最终用户体验:

“Microsoft 建议的最佳实践是将 UPN 与主 SMTP 地址相匹配。 ”

来源:配置备用登录 ID |微软文档

补救措施

如果您愿意,我们还可以使用 PowerShell 来修复此问题。这个简单的代码块将查找邮箱的主 SMTP 地址并更改 UPN 以进行匹配。它是基于 CSV 的:

Foreach ($Line in $CSV) {$Mailbox = Get-Mailbox $Line$PrimarySMTP = [string]$Mailbox.PrimarySMTPAddress$NewUPN = $PrimarySMTPSet-Mailbox $PrimarySMTP -UserPrincipalName $NewUPN}

2. mail.onmicrosoft.com 域检查

删除邮箱移动和邮件路由依赖于本地邮箱上标记的 SMTP 域。我们需要确认的一个关键域是“.mail.onmicrosoft.com”,如果丢失,将阻止邮箱移动。

$Mailboxes = Get-Mailbox -ResultSize UnlimitedForeach ($Mailbox in $Mailboxes) {$DomainFound = $False$EmailAddresses = (Get-Mailbox $Mailbox).EmailAddresses$EmailAddresses | Foreach-Object {If ($_ -like "*mail.onmicrosoft.com") {$DomainFound = $True}}If (!$DomainFound) {Write-host 'Not Found!'} Else {Write-host 'Domain Found'}}

补救措施

缺少这一域将导致迁移停止。因此,我们应该在邮箱上找到这个地址。我们如何做到这一点?

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

现在您的邮箱就有了所需的地址。对此需要注意的是,如果邮箱将此属性 (EmailAddressPolicyEnabled) 设置为 True,则此更改将失败。相反,您需要运行以下命令:

$Domain = ‘tenant.mail.onmicrosoft.com’$Alias = ‘Malboxalias’$NewAddress = $Alias+’@’+$DomainSet-Mailbox $PrimarySMTP -EmailAddresses @{Add="$EmailAddress"}

3. 错误域名检查

为了将邮箱迁移到 Exchange Online,它不得具有未经 Exchange Online 验证的 SMTP 域。如果邮箱标记有未经验证的域,迁移也会失败。首先,我们需要在变量中存储域列表,并检查每个邮箱的 EmailAddresses 属性以确保没有列出其他域。像这样的代码块应该足够了:

# Good Domains$GoodDomains = 'domain1.com','domain2.com','domain3.com','tenant.mail.onmicrosoft.com'$Mailboxes = Get-mailboxForeach ($Mailbox in $Mailboxes) {#Email Addresses to examine$Addresses = $Mailbox.EmailAddresses$User = $Mailbox.DisplayName$UPN = $Mailbox.UserPrincipalNameForeach ($Address in $Addresses) {$SmtpAddress = $Address.SMTPAddress$CurrentDomain = ($SMTPAddress.Split('@'))[1]If ($GoodDomains -NotContains $CurrentDomain) {$output = "$User,$UPN,$CurrentDomain." | Out-File -File $LogDestination -Append}}}

补救措施

任何未经验证的域都会停止迁移,那么我们如何删除它们呢?最简单的,也是最具潜在破坏性的,就是这样做:

$Aliases = (Get-Mailbox -ResultSize Unlimited |Where {$_.EmailAddresses -like "*baddomain.com"}).AliasForeach ($Alias in $Aliases){$EmailAddresses = (Get-Mailbox $Alias).EmailAddressesForeach ($EmailAddress in $EmailAddresses) {If ($EmailAddress -like "*baddomain.com"){Set-Mailbox $Alias -EmailAddresses @{remove="$EmailAddress"}}}}

此代码块将识别任何具有包含“baddomain.com”域的 SMTP 地址的邮箱,然后删除与该域匹配的任何地址。请小心,因为如果您依赖该域进行某些操作,这可能会导致问题。如果只有某些邮箱需要删除该域,则过滤此域可能很有用。

4. 保留和诉讼保留

我们可以执行的其他一些检查包括邮箱是否应用了保留策略或诉讼保留。对于保留策略,我们可以决定保留它们或不在 Exchange Online 中应用该策略。诉讼保留对邮箱具有不同的含义,通常需要保留这些含义,因为可能存在法律要求,并且邮箱在 Exchange Online 中需要重新应用保留。我们可以像这样识别邮箱:

$LitigationMailboxes = Get-Mailbox -Filter {LitigationHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $LitigationDestination -Append$RetentionMailboxes = Get-Mailbox | Where {$_.RetentionHoldEnabled -eq $True} | Select-Object DisplayName,PrimarySMTPAddress | Out-File $RetentionDestination -Append

5. 大件物品检查

Exchange Online 的绝对大项目限制为 150 MB,这意味着如果您的邮箱包含超过 150 MB 的项目,您将无法将邮箱移动到 Exchange Online。最重要的是,由于其他可能影响电子邮件大小的因素,它实际上可能比这个小。建议您检查邮箱中是否有超过 125 MB 的项目以进行分析。

Get-Mailbox -ResultSize Unlimited | Get-MailboxFolderStatistics -IncludeAnalysis -FolderScope All | Where-Object {$_.TopSubjectSize -gt 125MB} | Select-Object Identity, TopSubject, TopSubjectSize | Export-CSV -path "C:reportsLArgeItemReport.csv" -notype

PowerShell脚本

为了使一组代码更容易被可能有或没有太多 PowerShell 编码经验的管理员访问,我们可以使用 PowerShell 创建类似 GUI 的体验来运行先决条件检查。

例如,如果我们将脚本设为菜单驱动,我们的 PowerShell 脚本可以提供一种只需选择要运行的选项的体验。此外,我们可以将详细信息输出到 CSV 文件,其中包含要检查的用户列表。如果脚本涵盖迁移的所有方面,那么菜单可能如下所示:

[玩转系统] 使用 PowerShell 迁移到 Exchange Online

简单的菜单驱动的 PowerShell 脚本

请注意,我们为移动过程的每个主要部分都有一个菜单项:先决条件检查、邮箱移动和报告。对于先决条件子菜单,我们将能够调整菜单以包含我们在本文中介绍的先决条件检查,如下所示:

[玩转系统] 使用 PowerShell 迁移到 Exchange Online

用于执行先决条件检查的 PowerShell 脚本

现在我们有了一个脚本,可用于驱动邮箱从 Exchange 迁移到 Exchange Online。

结论

迁移脚本的第一部分到此结束。在本文中,我们了解到,即使在迁移邮箱之前,也可能需要满足一些先决条件,甚至上面的列表也不一定是 100%。邮箱移动范围之外的其他配置项包括:

  1. 重新创建日记规则
  2. 创建 OWA 策略
  3. 配置消息限制
  4. 检查权限并构建适当的批次
  5. 配置安全性 - 有关详细信息,请参阅我有关 PowerShell 和 Exchange Online 安全性的文章。

...以及更多...

可以这么说,此脚本只是一个更大项目的一部分,该项目旨在使迁移到 Exchange Online 变得更加容易。在本系列的下一篇文章中,我们将深入探讨创建新动作、暂停动作、删除动作等。还包括指向功能脚本的链接,您可以将其用作创建自己的迁移脚本的基础。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯