You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell导出O365邮箱报表无效,请求排查问题

问题排查与优化方案

核心问题分析

你遇到的无效CSV输出,主要源于两个关键错误:

  1. 错误使用 Format-Table 管道到 Export-Csv
    Format-Table 会把原始的邮箱对象转换成仅用于终端显示的格式化对象(类型为 Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData),这些对象没有你需要的业务属性,导出到CSV自然只有空或无效的字符串。必须移除 Format-Table 这一步,直接处理原始对象。

  2. 混淆了 Get-Mailbox 和 Get-MailboxStatistics 的属性与参数
    你试图通过 Get-MailboxStatistics 获取的很多属性(比如保留策略、诉讼保留状态、共享邮箱标识等)其实是 Get-Mailbox 本身就有的属性,不需要额外调用统计命令;同时 Get-MailboxStatistics 的参数使用完全错误(比如 -UserPrincipalName、-RetentionPolicy 都不是它的有效参数),正确用法是仅传入邮箱标识(Identity)来获取存储统计数据。

修正后的完整脚本

下面是优化后的脚本,既解决了你的问题,又提升了执行效率(缓存统计结果避免重复调用):

# 先连接到Exchange Online(如果还未建立会话)
Connect-ExchangeOnline

# 获取所有邮箱并生成报表
Get-Mailbox -ResultSize Unlimited | ForEach-Object {
    # 缓存主邮箱统计数据,避免重复调用命令
    $primaryStats = Get-MailboxStatistics -Identity $_.Identity
    # 缓存归档邮箱统计(仅当归档已启用时)
    $archiveStats = if ($_.ArchiveStatus -eq 'Active') {
        Get-MailboxStatistics -Identity $_.Identity -Archive
    } else {
        $null
    }

    # 构造最终要导出的对象
    [PSCustomObject]@{
        'Name'                  = $_.Name
        'UPN'                   = $_.UserPrincipalName
        'Display Name'          = $_.DisplayName
        'Primary Size (MB)'     = $primaryStats.TotalItemSize.Value.ToMB() # 转换为MB更直观
        'Archive Size (MB)'     = if ($archiveStats) { $archiveStats.TotalItemSize.Value.ToMB() } else { 0 }
        'Auto Expanding Archive'= $_.AutoExpandingMailboxEnabled
        'Retention Policy'      = $_.RetentionPolicy
        'Litigation Hold'       = $_.LitigationHoldEnabled
        'Is Shared Mailbox'     = $_.IsShared
    }
} | Export-Csv -Path "c:\Users\myusername\Desktop\magicreport.csv" -NoTypeInformation -Encoding UTF8

关键优化说明

  • 移除无效的 Format-Table:直接处理 Get-Mailbox 返回的原始对象,确保CSV导出真实的属性值。
  • 明确命令职责划分:
    • Get-Mailbox 负责获取邮箱的配置属性(UPN、显示名、保留策略、诉讼保留状态等)
    • Get-MailboxStatistics 仅负责获取存储相关的统计数据(邮箱大小、归档大小等)
  • 缓存统计结果:每个邮箱只调用两次统计命令(主邮箱+归档),避免重复调用提升执行速度。
  • 格式化大小单位:将原始的 TotalItemSize 转换为MB,报表更易读。
  • 增强CSV兼容性:添加 -NoTypeInformation 避免CSV开头的冗余类型信息,-Encoding UTF8 确保中文等特殊字符显示正常。

额外提示

如果你的环境中有大量邮箱(超过1000个),可以添加 -BatchSize 参数分批次处理,避免超时:

Get-Mailbox -ResultSize Unlimited -BatchSize 500 | ForEach-Object {
    # 同上的处理逻辑
}

内容的提问来源于stack exchange,提问作者YouLiveInASimulation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 11:27:31