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

Exchange PowerShell中Format-Table命令输出不生效问题求助

Exchange PowerShell Format-Table输出集合格式问题修复方案

问题根因

  • 你参考的多表合并逻辑仅适用于单条数据的属性合并,而$mailboxes是包含所有邮箱对象的数组,直接调用$mailboxes.DisplayName会返回所有邮箱DisplayName组成的数组,你把整个数组赋值给单个对象的属性,最终输出自然会显示为{值1,值2...}的集合格式
  • 原代码存在笔误:$LastLogonTime = $($mailboxes.ItemCount)错误给LastLogonTime赋值了ItemCount的值,也会导致字段内容异常
  • 原代码中直接在$mailboxes.后加计算属性的写法不生效,该语法仅适用于Select-Object命令场景

修复后完整代码

# 若已提前获取过$mailboxes可跳过第一步
$mailboxes = Get-Mailbox -ResultSize Unlimited | Get-MailboxStatistics

# 循环遍历每个邮箱对象构造自定义数据,支持后续扩展合并其他表字段
$allMailboxInfo = foreach ($mailbox in $mailboxes) {
    # 计算邮箱总大小(GB)
    $totalSizeGB = [math]::Round((($mailbox.TotalItemSize.Value.ToString()).Split("(")[1].Split(" ")[0].Replace(",", "") / 1GB), 2)
    # 计算归档大小(无归档则返回0)
    $archiveSizeGB = if ($mailbox.ArchiveTotalItemSize) {
        [math]::Round((($mailbox.ArchiveTotalItemSize.Value.ToString()).Split("(")[1].Split(" ")[0].Replace(",", "") / 1GB), 2)
    } else {
        0
    }
    
    # 构造包含所有需求字段的自定义对象
    [PSCustomObject]@{
        "DisplayName" = $mailbox.DisplayName
        "TotalItemSize(GB)" = $totalSizeGB
        "ItemCount" = $mailbox.ItemCount
        "LastLogonTime" = $mailbox.LastLogonTime
        "邮箱地址" = $mailbox.PrimarySmtpAddress
        "归档大小(GB)" = $archiveSizeGB
        "归档最大配额(GB)" = [math]::Round($mailbox.ArchiveQuota.Value.ToGB(), 2)
        "邮箱禁止接收配额(GB)" = [math]::Round($mailbox.ProhibitSendReceiveQuota.Value.ToGB(), 2)
        "邮箱警告配额(GB)" = [math]::Round($mailbox.IssueWarningQuota.Value.ToGB(), 2)
    }
}

# 输出格式化表格
$allMailboxInfo | Format-Table -AutoSize
# 若需要转成字符串存储可使用下方代码
# $tableStr = $allMailboxInfo | Format-Table -AutoSize | Out-String

多表合并扩展说明

如果后续需要关联其他表数据,只需在上述循环内,基于当前$mailbox的唯一标识(如邮箱地址、邮箱Guid)去对应表匹配数据,追加到自定义对象的属性中即可,逻辑清晰且适配批量数据场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:39:00