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

[玩转系统] Exchange Server 2019 邮箱运行状况检查

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

Exchange Server 2019 邮箱运行状况检查


[玩转系统] Exchange Server 2019 邮箱运行状况检查

组织正在并将其 Exchange Server 本地邮箱迁移到 Exchange Online 一段时间了。有时,这些迁移会顺利进行,有时会出现障碍,但很多时候,管理员对正在迁移的数据了解得越多,迁移就越顺利。作为进行迁移的管理员或顾问,打造最佳用户体验也应该纳入对话中。在迁移之前应该对用户的邮箱属性进行分析。我们应该看什么?

我们可以检查的一些事情是大型邮箱和单个文件夹中的大量项目。这些邮箱属性非常重要,因为它们确实可以改善最终用户的 Exchange 和 Exchange Online (EXO V2) 体验的性能。两者都会导致下载消息、响应消息和发送消息的延迟延长。微软也有一些建议,如果我们将这些建议与现实世界的经验相结合,我们可以为用户提供更好的体验。

大型邮箱性能的一些注意事项:

  • 每个文件夹少于 100,000 个项目
  • 每个邮箱少于 500 个文件夹
  • 更快的硬件 - SSD 驱动器(不进行碎片整理)、更多 RAM
  • 使用较新的 Outlook 客户端 - 缓存模式客户端的可调节滑块
  • 存档邮箱 - 减少活动邮箱中的电子邮件
  • 删除电子邮件

正如我们所看到的,有一些与文件夹中的项目以及邮箱大小相关的建议。让我们深入了解有关提取组织邮箱属性数据以及如何处理结果数据的 PowerShell。

大件物品数量

随着时间的推移,邮箱往往会变得混乱,导致文件夹中的项目数量增多。虽然最近出现了清理收件箱并将电子邮件数量保持为零的趋势,但这种趋势对于许多组织的用户来说并不普遍或不可能。我们发现有些用户从不删除电子邮件,并尝试保留所有电子邮件以供将来调用和使用,这往往会导致项目计数过多,从而导致性能不佳。我们可以使用 PowerShell 来识别这些用户及其大型项目计数文件夹,并与他们一起减少这些项目,以增强他们在 Outlook 中的邮箱性能。我们如何做到这一点?接下来让我们深入研究代码。

电源外壳

首先,我们需要设置一些基本变量,以便稍后在代码中引用。请注意使用注释行来分隔和识别代码部分的用途:

# Variables
$Counter = 1
$AllMaxFolders = $Null
$AllMaxFolders = @()
$FiftyKPlusFolders = $Null
$FiftyKPlusFolders = @()

检索邮箱列表:

# Mailboxes
$Mailboxes = Get-Mailbox -ResultSize Unlimited
$TotalCount = $Mailboxes.Count

** 在拥有超过 1,000 个邮箱的环境中,需要使用 -ResultSize Unlimited。如果我们不使用该选项,则 Get-Mailbox cmdlet 将仅检索前 1,000 个邮箱。

通过邮箱列表,我们现在可以检查每个邮箱中的每个文件夹中是否有超过 100,000 个项目。

Foreach ($Mailbox in $Mailboxes) {

每个循环都有一组要使用的变量。其中一些重置值在循环中用于确保数据完整性,其他重置值用于提取正在处理的邮箱所需的值:

# Variables
$Name = $Mailbox.Displayname
$PrimarySMTPAddress = [string]$Mailbox.PrimarySMTPAddress
$Items = $Null
$Stats = $Null
$MaxItems = 0
$MaxFolder = $Null
$Items = $True

接下来,我们需要获取邮箱的文件夹信息:

 $FolderStats = Get-MailboxFolderStatistics -Identity $PrimarySMTPAddress -ErrorAction STOP | Select-Object Name,ItemsInFolder,FolderPath }

在下面的循环中,将检查每个文件夹以查看文件夹中是否有超过 50,000 个项目。找到的任何文件夹都存储在 $FiftyKPlusFolders 变量中。

Foreach ($FolderStat in $FolderStats) {
      
	# Variables for this loop
	$Number = $FolderStat.ItemsInFolder
	$FolderPath = $FolderStat.FolderPath
	$Result = $Null
	
	If ($Number -gt 50000) {
		$Result = "$Name,$Number,$FolderPath"
	}
	If ($Number -gt $MaxItems) {
		$MaxItems = $Number
 		$MaxFolder = $FolderPath
	}
	# Add folder with over 50K items to array
	If ($Null -ne $Result) {
		$FiftyKPlusFolders += $Result
	}
}

文件输出示例

来自没有大型项目文件夹的环境的输出示例:

------------------------------------------Folder with over 50K items:------------------------------------------
No folders were found to contain more than 50,000 items!

然而,情况通常并非如此,因为脚本通常会在邮件文件夹中找到至少一个包含大量项目的邮箱。在这种情况下,结果看起来像这样:

------------------------------------------Folder with over 50K items:------------------------------------------Name,Items,FolderPathSam Anderson,71497,/Deleted ItemsEric Fornet,99917,/Deleted ItemsJennifer Dorsey,126569,/InboxLory Kendall,88299,/Deleted ItemsAnthony Cron,158919,/Inbox/AutomatedDave Smith,108682,/InboxRonald Lee,109252,/Inbox/Monitoring

获得此报告后,我们将从拥有超过 100K 项的任何用户开始,因为这对最终用户影响最大。然后,接下来应检查列出的所有文件夹,但小于 100K,尤其是当项目计数接近 100K 时。组织应使用此报告联系其最终用户(例如通过服务台),以帮助用户减少这些高项目数量。

大文件夹计数

一项不寻常的检查是邮箱中存在的文件夹数量。虽然大多数(如果不是全部)组织的用户不会超过此数量,但检查一下是一个很好的值,因为 Microsoft 指出超过 500 个文件夹可能会导致客户端性能不佳。因此,检查这些是一个好主意,类似于之前检查项目计数的代码,我们将在 Foreach 循环中检查每个邮箱并将结果放入 CSV 文件中以供以后分析。这里的关键 cmdlet 也模仿了上一节,是 Get-MailboxFolderStatistics cmdlet,我们可以使用它来提取文件夹计数。
在这种情况下,我们还依赖 Measure-Object cmdlet,它允许我们对文件夹进行计数。为什么这有效?那么,Get-MailboxFolderStatistics cmdlet 将列出邮箱中包含的所有文件夹,而 Measure-Object 只是简单地对这些文件夹进行计数。从视觉上看,它看起来像这样:

Get-MailboxFolderStatistics Damian | ft Name,FolderSize

[玩转系统] Exchange Server 2019 邮箱运行状况检查

其中每一行都是 Exchange 邮箱中的一个文件夹。对每一行进行计数将为我们提供邮箱中存在的文件夹的准确计数。进入 PowerShell!

电源外壳

# Variables
$Destination = 'FolderReport.csv'
$Mailboxes = Get-ExOMailbox -ResultSize Unlimited

# Body
$Output = 'Mailbox,FolderCount' | Out-File -FilePath $Destination
Foreach ($Mailbox in $Mailboxes) {
	$Folders = Get-MailboxFolderStatistics -Identity $Mailbox.PrimarySMTPAddress | Measure-Object | Select-Object -ExpandProperty Count
	$MailboxName = $Mailbox.DisplayName
	$Output = "$MailboxName,$Folders" | Out-File -FilePath $Destination -Append
}

正如我们在上面看到的,我们定义了一个输出文件,并再次在变量部分中收集环境中的所有邮箱。然后在正文部分,我们检查每个邮箱,计算存在的文件夹,然后将这些结果导出到 CSV 文件进行分析。该文件将如下所示(可以轻松导入到 Excel 中):

Mailbox,FolderCount#Safety,18Amy A,63Amy C,233Amy D,908Amy K,373Amy M,65Amy R,837Amy S,54Amy T,171Amy W,356

请注意,我们的文件夹计数范围很广,从 18 到 908。为了清楚起见,我们需要专注于超过 500 的文件夹。然后,如果我们愿意,可以通过在其中放置查询来减少输出,如下所示:

If ($Folders -gt 500) {
    $MailboxName = $Mailbox.DisplayName
    $Output = "$MailboxName,$Folders" | Out-File -FilePath $Destination -Append
}

然后,只有包含超过 500 个文件夹的邮箱才会导出到我们的结果文件中。

大型邮箱(和档案!)

现在我们已经查看了大型项目和文件夹计数,我们还可以查看大型整体邮箱及其存档,作为环境中邮箱分析的一部分。对于这一问题,我们将研究可能会出现迁移问题的较大邮箱,特别是大小超过 75GB 的邮箱。使用 75GB 不一定是任意的,而更多的是用作分析邮箱大小以及分析性能问题和迁移问题的可能性的起点。因此,在查询邮箱时,我们可以报告达到此大小的任何邮箱,甚至可以识别邮箱层,一层用于 75-100 GB,另一层用于任何超过 100 GB 的邮箱。接下来是 PowerShell 代码。

电源外壳

 
$Mailboxes = Get-Mailbox -ResultSize Unlimited
$OutputStat = @()
Foreach ($Mailbox in $Mailboxes) {
	$UPN = $Mailbox.SamAccountName
	$MailboxStatistics = Get-MailboxStatistics $UPN | Select-Object DisplayName,@{expression = { $_.TotalItemSize.Value.ToMB()} ; label="MailboxSize"}
	$OutputStat += $MailboxStatistics
}
$OutputStat | Sort MailboxSize

此代码将为我们提供基础知识,所有邮箱及其相对大小将导出到屏幕上供我们查看。为了进一步增强此代码以识别我们的邮箱层,我们可以在末尾添加一些行来区分不同的邮箱大小。正如我们上面所讨论的,$MailboxStatistics 变量以 MB 为单位存储邮箱的大小,因此如果我们需要从 75GB 开始,我们需要确保 $MailboxStatistics 变量的值高于 75,000。

# Variables
$Destination = 'LargeMailboxes.csv'
$Mailboxes = Get-Mailbox -ResultSize Unlimited
$Over75GB = @()
$Over100GB = @()

Foreach ($Mailbox in $Mailboxes) {
	$UPN = $Mailbox.SamAccountName
	$MailboxStatistics = Get-MailboxStatistics $UPN | Select-Object DisplayName,@{expression = { $_.TotalItemSize.Value.ToMB()} ; label="MailboxSize"}

	#Tier 1 and 2 Identification
	If ($MailboxStatistics.MailboxSize -gt 75000) {
		If ($MailboxStatistics.MailboxSize -gt 100000) {
$Over100GB += $MailboxStatistics
		} Else {
$Over75GB += $MailboxStatistics
		}
	}
}
# Output findings to Output File
$Output = "Mailboxes between 75 and 100 GB:" | Out-File -FilePath $Destination
$Over75GB | Out-File -FilePath $Destination -Append
$Output = "Mailboxes over 100 GB:" | Out-File -FilePath $Destination -Append
$Over100GB | Out-File -FilePath $Destination -Append

示例输出文件

Mailboxes between 75 and 100 GB:

DisplayName TotalItemSize
----------- -------------
Nick Smarth 82881.44
Sarah Johnson 93458.09

Mailboxes over 100 GB:

DisplayName TotalItemSize
----------- -------------
Damian Scoles 108520.78

从这份报告中,我们对需要与哪些用户进行对话以减少他们的邮箱大小有一个清晰而简洁的想法。存档邮箱本质上是相同的,唯一需要的更改是将“-Archive”开关添加到 Get-Mailbox Cmdlet。其余代码的运行方式相同,但针对最终用户可能拥有的任何存档邮箱执行。

结论

与往常一样,PowerShell 是一个非常实用且功能强大的工具,可用于识别 Exchange Server 环境中需要修复的潜在问题。使用 PowerShell 识别具有过多文件夹项目、过多文件夹和巨大邮箱的邮箱已成为现实。这三个代码部分还可以合并为一个报告,供 IT 人员使用来对这些常见问题进行故障排除和/或修复。

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

取消回复欢迎 发表评论:

关灯