Exchange Server邮箱大小PowerShell报告格式优化及新增列需求
处理Exchange邮箱报告的PowerShell脚本优化方案
需求说明
- 把
TotalItemSize、IssueWarningQuota、ProhibitsendReceiveQuota、ProhibitSendQuota列的格式改成纯字节数值,和FreeSpace列一致 - 新增
FreeSpace %列,算出邮箱可用空间占总配额的百分比
优化后的完整脚本
# 获取所有邮箱统计数据并处理格式 Get-MailboxStatistics -ResultSize Unlimited | Select-Object DisplayName, FreeSpace, # 提取TotalItemSize的纯字节数值 @{Name='TotalItemSize'; Expression={[double]($_.TotalItemSize.ToString().Split('(')[1].Split(' ')[0].Replace(',',''))}}, alias, # 提取IssueWarningQuota的纯字节数值 @{Name='IssueWarningQuota'; Expression={[double]($_.IssueWarningQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',',''))}}, # 提取ProhibitsendReceiveQuota的纯字节数值 @{Name='ProhibitsendReceiveQuota'; Expression={[double]($_.ProhibitsendReceiveQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',',''))}}, # 提取ProhibitSendQuota的纯字节数值 @{Name='ProhibitSendQuota'; Expression={[double]($_.ProhibitSendQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',',''))}}, # 计算可用空间占比 @{Name='FreeSpace %'; Expression={ # 排除配额无限制的情况,避免计算错误 if ($_.ProhibitsendReceiveQuota -ne $null -and $_.ProhibitsendReceiveQuota.ToString() -notmatch 'Unlimited') { $totalQuotaBytes = [double]($_.ProhibitsendReceiveQuota.ToString().Split('(')[1].Split(' ')[0].Replace(',','')) # 计算百分比并保留两位小数 [math]::Round(($_.FreeSpace / $totalQuotaBytes) * 100, 2) } else { 'Unlimited' } }} | # 导出到CSV文件,替换成你实际需要的路径 Export-Csv -Path "C:\MailboxReports\MailboxUsage.csv" -NoTypeInformation -Encoding UTF8
核心逻辑说明
- 纯字节转换:针对像
2.784 GB (2,988,883,006 bytes)这种格式的字符串,先按(拆分取后半段,再按空格拆分取第一个元素(带逗号的字节数),最后去掉逗号转成数值类型,就得到纯字节数了 - 可用空间占比:
- 先判断邮箱配额是不是无限制,要是无限制就直接返回
Unlimited,防止出现除以零的错误 - 用
FreeSpace(已为纯字节)除以总配额的字节数,乘以100后用[math]::Round保留两位小数,得到百分比
- 先判断邮箱配额是不是无限制,要是无限制就直接返回
注意点
- 执行脚本的账号必须有Exchange的管理权限
- 记得把导出路径
C:\MailboxReports\MailboxUsage.csv改成你自己的路径 - 要是有些邮箱设置了无限制配额,对应的
FreeSpace %列会显示Unlimited
内容的提问来源于stack exchange,提问作者Aviad Ofek
相关产品推荐
相关产品推荐

