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
相关产品推荐
相关产品推荐

