[玩转系统] 使用 PowerShell 的 Office 365 邮箱大小报告
作者:精品下载站 日期:2024-12-14 03:41:17 浏览:15 分类:玩电脑
使用 PowerShell 的 Office 365 邮箱大小报告
跟踪 Office 365 邮箱大小非常重要。您不希望用户的邮箱达到其发送和接收配额,以防止出现“超出邮箱大小限制”之类的错误。
借助 PowerShell,我们可以创建 Office 365 邮箱大小报告,为您提供所需的所有信息。
下面的 PowerShell 脚本将以下数据从用户邮箱、共享邮箱和存档邮箱导出到 CSV 文件:
- 显示名称
- 主要电子邮件地址
- 邮箱类型
- 用户上次操作时间
- 邮箱总大小
- 已删除项目尺寸
- 商品数量
- 已删除项目计数
- 问题警告大小
- 禁止发送接收配额(最大邮箱大小)
- 存档大小(如果用户有存档)
- 存档项目计数
- 存档已删除项目计数
- 存档警告配额
- 存档配额
我可以简单地与您分享脚本,但了解脚本的工作原理总是有好处的。因此,我们首先将浏览脚本,同时我解释不同的选项。在本文末尾,您将在我的 Github 中找到该脚本的链接。
如何使用 Office 365 邮箱大小报告
Office 365 邮箱大小报告脚本可以使用几个不同的参数运行。您始终需要使用 -adminUPN
参数提供您的电子邮件地址以进行身份验证。如果没有任何其他参数,该脚本将生成一个报告:
- 共享邮箱
- 存档邮箱
- 将报告存储在脚本根位置 (.\mailboxsizereport-sep-23-2021.csv)
.\MailboxSizeReport.ps1 -adminUPN [email protected]
共享邮箱
对于共享邮箱,您有多种选择。默认情况下,它们会被包含在内,但您可以将它们排除在报告之外,或者使用 -sharedMailboxes
参数仅获取共享邮箱:
# Get only the shared mailboxes
.\MailboxSizeReport.ps1 -adminUPN [email protected] -sharedMailboxes only
# Get only the user mailboxes
.\MailboxSizeReport.ps1 -adminUPN [email protected] -sharedMailboxes no
# (Default) Get user and shared mailboxes
.\MailboxSizeReport.ps1 -adminUPN [email protected] -sharedMailboxes include
存档邮箱
默认情况下,如果用户有存档邮箱,我们还会收集存档邮箱的统计信息。如果您不想要存档邮箱(它们会使脚本变慢一些),请使用 -archive:$false
参数:
# Don't get the archive mailboxes
.\MailboxSizeReport.ps1 -adminUPN [email protected] -archive:$false
CSV 导出路径
您可以使用 -csvpath
参数定义输出文件和路径。
# Define path for CSV file
.\MailboxSizeReport.ps1 -adminUPN [email protected] -csvpath c:\temp\mailboxsizereport.csv
邮箱大小报告脚本
要获取 Office 365 邮箱大小,我们首先需要连接到 Exchange Online。然后我们需要邮箱属性和邮箱统计信息来创建完整的报告。
我已使用 Exchange Online v2 模块作为脚本。新的Exchange Online模块的优点是它支持MFA和SSON。这样,您只需输入您的电子邮件地址,我们就可以连接到 Exchange Online,无需任何用户交互。
为了使脚本更容易在其他计算机上使用,我添加了对 Exchange Online Management 模块的检查以及在该模块不可用时安装它的选项。我们还检查现有的 Exchange Online 连接以防止多个连接。
您可以在本文中找到代码示例。
使用 PowerShell 获取邮箱大小
要获取邮箱统计信息,我们首先需要收集所有邮箱。 PowerShell 中的 Get-Mailbox cmdlet 返回所有邮箱属性,而 Get-MailboxStatistics 返回有关邮箱使用情况的信息。
首先我们获取报告所需的所有邮箱
Function Get-Mailboxes {
<#
.SYNOPSIS
Get all the mailboxes for the report
#>
process {
switch ($sharedMailboxes)
{
"include" {$mailboxTypes = "UserMailbox,SharedMailbox"}
"only" {$mailboxTypes = "SharedMailbox"}
"no" {$mailboxTypes = "UserMailbox"}
}
Get-EXOMailbox -ResultSize unlimited -RecipientTypeDetails $mailboxTypes -Properties IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase |
select UserPrincipalName, DisplayName, PrimarySMTPAddress, RecipientType, IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase
}
}
根据 SharedMailboxes 参数,我们确定是否要包含它们。我们需要从 Get-EXOMailbox cmdlet 获取一些额外的属性:
- 问题警告配额
- 禁止发送接收配额
- 存档配额
- 存档警告配额
- 档案数据库
通过 ArchiveDatabase 属性,我们可以确定用户邮件是否也有存档邮箱。通过使用选择,我们只返回邮箱报告中需要的字段。
在 PowerShell 中获取邮箱统计信息
对于每个邮箱,我们将获取邮箱统计信息。现在我们还想包括用户的存档邮箱。为此,我们需要运行 Get-EXOMailboxStatistics cmdlet 两次。一次用于普通邮箱,一次用于存档邮箱。
现在我注意到后者要慢得多。我不知道具体原因,但从存档邮箱请求统计信息所需的时间明显长于普通邮箱。
对于普通邮箱,我们可以简单地在 PowerShell 中使用以下 cmdlet:
# Get mailbox size
$mailboxSize = Get-EXOMailboxStatistics-Identity $_.UserPrincipalName | Select TotalItemSize,TotalDeletedItemSize,ItemCount,DeletedItemCount,LastUserActionTime
对于存档邮箱,我们首先检查是否需要存档邮箱,然后检查 ArchiveDatabase 属性是否已设置:
# Get archive size if it exists and is requested
$archiveSize = 0
if ($archive.IsPresent -and ($_.ArchiveDatabase -ne $null)) {
$result = Get-EXOMailboxStatistics -UserPrincipalName $_.UserPrincipalName -Archive | Select ItemCount,DeletedItemCount,@{Name = "TotalArchiveSize"; Expression = {$_.TotalItemSize.ToString().Split("(")[0]}}
if ($result -ne $null) {
$archiveSize = ConvertTo-Gb -size $result.TotalArchiveSize
}else{
$archiveSize = 0
}
}
对于没有 Archive 的邮箱,我们将 archiveSize 设置为 0 并重置 archiveResult。
所有数据都放入 PSCustomObject 中,以便我们稍后可以轻松地将其导出到 CSV 文件。
Function Get-MailboxStats {
<#
.SYNOPSIS
Get the mailbox size and quota
#>
process {
$mailboxes = Get-Mailboxes
$i = 0
$mailboxes | ForEach-Object {
# Get mailbox size
$mailboxSize = Get-EXOMailboxStatistics-identity $_.UserPrincipalName | Select-Object TotalItemSize,TotalDeletedItemSize,ItemCount,DeletedItemCount,LastUserActionTime
if ($null -ne $mailboxSize) {
# Get archive size if it exists and is requested
$archiveSize = 0
$archiveResult = $null
if ($archive.IsPresent -and ($null -ne $_.ArchiveDatabase)) {
$archiveResult = Get-EXOMailboxStatistics -UserPrincipalName $_.UserPrincipalName -Archive | Select-Object ItemCount,DeletedItemCount,@{Name = "TotalArchiveSize"; Expression = {$_.TotalItemSize.ToString().Split("(")[0]}}
if ($null -ne $archiveResult) {
$archiveSize = ConvertTo-Gb -size $archiveResult.TotalArchiveSize
}
}
write-host $mailboxSize.TotalDeletedItemSize
[pscustomobject]@{
"Display Name" = $_.DisplayName
"Email Address" = $_.PrimarySMTPAddress
"Mailbox Type" = $_.RecipientTypeDetails
"Last User Action Time" = $mailboxSize.LastUserActionTime
"Total Size (GB)" = ConvertTo-Gb -size $mailboxSize.TotalItemSize.ToString().Split("(")[0]
"Deleted Items Size (GB)" = ConvertTo-Gb -size $mailboxSize.TotalDeletedItemSize.ToString().Split("(")[0]
"Item Count" = $mailboxSize.ItemCount
"Deleted Items Count" = $mailboxSize.DeletedItemCount
"Mailbox Warning Quota (GB)" = ($_.IssueWarningQuota.ToString().Split("(")[0]).Split(" GB") | Select-Object -First 1
"Max Mailbox Size (GB)" = ($_.ProhibitSendReceiveQuota.ToString().Split("(")[0]).Split(" GB") | Select-Object -First 1
"Mailbox Free Space (GB)" = (($_.ProhibitSendReceiveQuota.ToString().Split("(")[0]).Split(" GB") | Select-Object -First 1) - (ConvertTo-Gb -size $mailboxSize.TotalItemSize.ToString().Split("(")[0])
"Archive Size (GB)" = $(if($null -ne $archiveResult) {ConvertTo-Gb -size $archiveResult.TotalArchiveSize} else {'-'})
"Archive Items Count" = $(if($null -ne $archiveResult) {$archiveResult.ItemCount} else {'-'})
"Archive Mailbox Free Space (GB)*" = $(if($null -ne $archiveResult) {(ConvertTo-Gb -size $_.ArchiveQuota.ToString().Split("(")[0]) - $archiveSize} else {'-'})
"Archive Deleted Items Count" = $(if($null -ne $archiveResult) {$archiveResult.DeletedItemCount} else {'-'})
"Archive Warning Quota (GB)" = $(if($null -ne $archiveResult) {($_.ArchiveWarningQuota.ToString().Split("(")[0]).Split(" GB") | Select-Object -First 1} else {'-'})
"Archive Quota (GB)" = $(if($null -ne $archiveResult) {(ConvertTo-Gb -size $_.ArchiveQuota.ToString().Split("(")[0])} else {'-'})
}
$currentUser = $_.DisplayName
Write-Progress -Activity "Collecting mailbox status" -Status "Current Count: $i" -PercentComplete (($i / $mailboxes.Count) * 100) -CurrentOperation "Processing mailbox: $currentUser"
$i++;
}
}
}
}
您可能已经注意到,我们将所有大小都转换为 GB。原因是 Get-MailboxStatistics 根据大小返回以 KB、MB 或 GB 为单位的大小。但在报告中,拥有一个单位要方便得多。
因此,通过下面的函数,我们可以将所有大小转换为 GB,并将它们四舍五入到两位小数:
Function ConvertTo-Gb {
<#
.SYNOPSIS
Convert mailbox size to Gb for uniform reporting.
#>
param(
[Parameter(
Mandatory = $true
)]
[string]$size
)
process {
if ($size -ne $null) {
$value = $size.Split(" ")
switch($value[1]) {
"GB" {$sizeInGb = ($value[0])}
"MB" {$sizeInGb = ($value[0] / 1024)}
"KB" {$sizeInGb = ($value[0] / 1024 / 1024)}
"B" {$sizeInGb = 0}
}
return [Math]::Round($sizeInGb,2,[MidPointRounding]::AwayFromZero)
}
}
}
下载完整脚本
您可以从我的 GitHub 页面下载完整的脚本。我建议您首先在一小部分邮箱上进行测试。例如,将第 122 行 (Get-EXOMailboxes) 中的 ResultSize 从无限制更改为 10。
# Change this line
Get-EXOMailbox -ResultSize unlimited -RecipientTypeDetails $mailboxTypes -Properties IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase |
select UserPrincipalName, DisplayName, PrimarySMTPAddress, RecipientType, RecipientTypeDetails, IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase
# To
Get-EXOMailbox -ResultSize 10 -RecipientTypeDetails $mailboxTypes -Properties IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase |
select UserPrincipalName, DisplayName, PrimarySMTPAddress, RecipientType, RecipientTypeDetails, IssueWarningQuota, ProhibitSendReceiveQuota, ArchiveQuota, ArchiveWarningQuota, ArchiveDatabase
总结
要从 PowerShell 命令行轻松运行此脚本,您可以在配置文件中添加指向该脚本的别名。阅读本文中有关设置 PowerShell 配置文件的所有内容,或阅读本文中有关如何运行 PowerShell 脚本的一般内容。
我希望您发现这个脚本很有用。如果您有任何疑问,请在下面发表评论。
您可能还喜欢以下 PowerShell 报告脚本之一:
- 邮箱权限报告
- OneDrive 大小报告
- 外交部现状报告
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag