如何使用 Powershell 获取 Exchange 数据库中按用户排序的 2 年以上的电子邮件列表?

如何使用 Powershell 获取 Exchange 数据库中按用户排序的 2 年以上的电子邮件列表?

我们目前正在研究归档电子邮件并修改我们的保留政策。最大的问题是(对于法律部门而言),我们想要保存多久以前的数据?目前,我们的用户的邮箱限制很大,过去所有人都可以根据自己的需要进行归档。因此,我们有几百 GB 的数据不在 Exchange 数据库中,但我们最终可能会将其吸入存档数据库以供发现。我希望能够为法律团队量化如果我们回溯 1 年、2 年、3 年等,这些数据会有多少。

我在 TheDailyAdmin 上找到了一个相当简单的 Powershell 脚本,它大部分情况下都能满足我的要求,但它把所有东西都放在了一堆。我希望能够看到结果,但按用户排序,以便知道 Sally 有 47MB 的数据超过 2 年,Charles 有 190MB 的数据超过 2 年,等等。

这是我运行的脚本:

get-mailboxdatabase | get-mailbox -resultsize unlimited | get-mailboxfolderstatistics -folderscope all -includeoldestandnewestitems | export-csv mailbox_stats.csv

它可以很好地将它们全部放入文件中,但我无法分辨谁的电子邮件属于谁。我也专门在我的邮箱上运行了它,但我不想对每个用户手动运行它,因为那会花一些时间!我不是 Powershell 专家,但希望有人有更扎实的掌握,可以帮助我指出命令的正确方向,以帮助进一步分解它。

提前致谢!

答案1

我试图解决同样的问题并得出了以下结论。

您需要定义$location并更改addyears(-1)为您想要的任意年数。在此示例中,-1 表示 1 年前。

$Mailbox = Get-MailboxDatabase | Get-Mailbox

Foreach ($MBX in $Mailbox) {

$usermailbx = Get-Mailbox -identity $MBX | Get-MailboxStatistics
$userarchmailbx = Get-Mailbox -identity $MBX  | search-mailbox -SearchQuery "received<=$((get-date).addyears(-1).toString("yyyy-MM-ddTHH:mm:ssZ"))" -EstimateResultOnly
[pscustomobject]@{UserName=$usermailbx.displayname;TotalItemCount=$usermailbx.ItemCount;TotalItemSize=$usermailbx.totalitemsize.value;DeletedItemSize=$usermailbx.totaldeleteditemsize.value;ArchiveSize=$userarchmailbx.ResultItemsSize} | export-csv -append "$location\file.csv"
}

答案2

调查多邮箱搜索/发现搜索满足您的需求。您可以通过编辑现有脚本来获取每个邮箱中各个文件夹的统计信息,但要获取某个日期范围内收到的所有邮件的大小,请参考上述链接。无论如何,这都不是一次快速搜索……

答案3

Exchange PowerShell cmdlet 不提供收集您所需统计信息的方法。正如您所发现的,它只能聚合一个文件夹;它无法将统计信息细分为日期范围。

答案4

我正在寻找类似的东西。

我找到了这个命令:

Search-Mailbox "<user_name>" -SearchQuery 'Received<5/20/2018' -EstimateResultOnly

这里提到: https://social.technet.microsoft.com/Forums/office/en-US/222ac7a6-8822-40c6-b4ad-75aac81a69f6/a-report-to-determine-emails-older-than?forum=exchange2010

它看起来运行良好,但最多只能容纳 10,000 封电子邮件。对于 50+GB 的邮箱来说,这是值得怀疑的

相关内容