管理您的 Exchange 数据库使其处于最佳状态
任何负责 Microsoft Exchange 环境的系统管理员很可能在某些时候需要管理 Exchange 数据库。管理员可以使用 Get-MailboxDatabase、New-MailboxRepairRequest 和 Move-DatabasePath PowerShell cmdlet 来实现此目的,而不是使用 Exchange 管理中心。
在正常操作期间,您通常不需要担心 EDB 文件。尽管它们是 Exchange 功能不可或缺的一部分,但日常操作通常不直接涉及数据库。如上所述,有许多情况需要更直接的干预。
Exchange 管理工具提供了用于管理 Exchange 的 PowerShell 模块。这些工具很可能会安装在您的 Exchange Server 上,如以下说明中所示。
让我们深入探讨您可能会遇到的一些有趣的场景。
加载 Exchange 管理 PowerShell
请注意,其中一些 cmdlet 仅适用于本地 Exchange。
通常建议使用该模块的方法是通过 PowerShell 远程会话远程连接到 Exchange Server 并加载 Exchange cmdlet,如下所示。
PS> Set-ExecutionPolicy RemoteSigned
PS> $UserCredential = Get-Credential
PS> $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://<ServerFQDN>/PowerShell/ -Authentication Kerberos -Credential $UserCredential
PS> Import-PSSession $Session -DisableNameChecking通过以下命令完成操作后,请确保从 PowerShell 会话中删除连接:
Remove-PSSession $Session。
EDB 文件的默认位置
每个版本的 Exchange 将 EDB 文件放在略有不同的位置。您将在下面看到默认位置。当直接与这些文件交互时,这会派上用场,尽管使用可用的 PowerShell 命令,您可能不必这样做!
- Exchange Server 2010
C:\Program Files\Microsoft\Exchange Server\V14\Mailbox Database\ - Exchange Server 2013
C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\邮箱数据库名称\ - Exchange Server 2016 和 2019
C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\
使用 Get-MailboxDatabase 查找邮箱
通常,您只需要知道给定邮箱数据库的位置或许多可用属性中的任何一个。您可以使用 Get-MailboxDatabase cmdlet 查找有关 Exchange 数据库的大量有用信息,如下所示。
虽然返回了很多属性,但我们只对 Name、EdbFilePath 及其 Mounted 状态感兴趣。要检索实际的 mounted 值,请使用 Status 参数,否则不会输出任何值。
您可以在下面看到 Get-MailboxDatabase cmdlet 生成的示例。
PS> Get-MailboxDatabase -Name MyExchangeDatabase -Status | Select-Object Name, EdbFilePath, Mounted | Format-List
Name : MyExchangeDatabase
EdbFilePath : C:\Program Files\Microsoft\Exchange Server\V15\Mailbox\Mailbox Database 1000001111.edb
Mounted : True
--snip--使用 Dismount-Database 卸载 Exchange 数据库
现在您已经通过 Get-MailboxDatabase 获得了有关邮箱数据库的一些信息,您可以选择卸载该数据库。为此,请使用 Dismount-Database cmdlet。
EDB 文件所在的默认目录并不理想。您可能有一个性能更好且更易于管理的位置来将它们移动到。不过,在此之前,您必须卸载数据库,如下所示。
PS> Get-MailboxDatabase -Name "MyExchangeDatabase" | Dismount-Database -Confirm:$False
PS> Get-MailboxDatabase -Name "MyExchangeDatabase" -Status | Select-Object Name, Mounted | Format-List
Name : MyExchangeDatabase
Mounted : False
--snip--使用 Move-DatabasePath 移动邮箱数据库
由于您已卸载数据库,现在将邮箱数据库移动到新位置。这是使用适当命名的 Move-DatabasePath cmdlet 完成的。
等待!如果运行 Get-Mailboxdatabase 并发现您打开了循环日志记录,该怎么办?根据移动数据库文件的最佳实践,需要将其关闭。为此,请使用 Set-MailboxDatabase cmdlet。
PS> Set-MailboxDatabase -Name MyExchangeDatabase -CircularLoggingEnabled:$False
根据我们的环境,在此之前可能需要采取一些额外的步骤。值得注意的是,您可能需要删除现有的邮箱数据库副本。邮箱数据库副本是在 Exchange 服务器之间分发和复制的数据库副本。别担心,即使我们在这里删除它们,我们也会将它们添加回来!
PS> Remove-MailboxDatabaseCopy -Identity MyExchangeDatabase -Confirm:$False您现在应该能够将数据库移动到新位置。如果数据库已卸载,运行 Move-DatabasePath 实际上会将数据库文件重新定位到新路径。
PS> Move-DatabasePath -Identity MyExchangeDatabase -EdbFilePath C:\EDB\MyExchangeDatabase.edb成功!数据库已移动,现在添加回数据库副本,并重新打开循环日志记录,如下所示。
PS> Add-MailboxDatabaseCopy -Identity MyExchangeDatabase
PS> Set-MailboxDatabase -Name MyExchangeDatabase -CircularLoggingEnabled:$True
使用 New-MailboxRepairRequest 修复损坏的邮箱
数据库移动后,也许您想确保数据库上没有任何损坏的邮箱。方便的是,有一个名为 New-MailboxRepairRequest 的命令。此命令可以在单个邮箱上运行,如果不带参数运行,则可以在给定数据库中的所有邮箱上运行,如下所示。
PS> New-MailboxRepairRequest -Database MyExchangeDatabase重要!开始修复请求后,必须卸载数据库才能停止该过程。此外,只有正在修复的邮箱无法访问,所有其他邮箱在数据库修复期间仍然可以访问。
将 PowerShell 和 ESEUTIL 粘合在一起
PowerShell 的强大功能之一是将许多不同的工具粘合在一起。许多 Exchange 管理员常用的实用程序是 eseutil.exe。
也许您想对 EDB 文件进行碎片整理。碎片整理可以通过 eseutil 完成。以下脚本就是一个示例,该脚本演示了如何将 PowerShell 与标准 shell 实用程序结合起来。
PS> Set-Location -Path (Split-Path (Get-MailboxDatabase -Name MyExchangeDatabase).EdbFilePath)
PS> Dismount-Database -Name MyExchangeDatabase
PS> eseutil /d MyExchangeDatabase.edb /
PS> Mount-Database -Name MyExchangeDatabase请注意,当您开始对数据库进行碎片整理时,您的用户将无法访问该数据库中存储的任何邮箱。此外,您将需要大约 110% 的磁盘数据库大小来执行碎片整理。
结论
尽管您可以通过 Exchange 管理中心执行许多操作,但管理的最佳实践是自动化和可重复性。通过利用 PowerShell,您可以通过自动化许多常见场景来限制常见的管理重复,最终节省时间并防止麻烦!