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

如何使用PowerShell在同一张表中获取Exchange邮箱及存档大小等数据

合并Exchange邮箱主数据与存档数据到同一张表的实现方案

完整修改代码

# 整合邮箱主数据与存档数据
$Result = @() 
$mailboxes = Get-Mailbox -ResultSize Unlimited
$totalmbx = $mailboxes.Count
$i = 1 
$mailboxes | ForEach-Object {
    $i++
    $mbx = $_
    $archiveSize = $null
    $primarySizeGB = $null
    $itemCount = $null
    $lastLogonTime = $null
 
    Write-Progress -activity "Processing $mbx" -status "$i out of $totalmbx completed"

    # 拉取主邮箱统计数据
    $primaryMbs = Get-MailboxStatistics $mbx.UserPrincipalName -ErrorAction SilentlyContinue
    if ($primaryMbs -and $primaryMbs.TotalItemSize -ne $null) {
        $primarySizeGB = [math]::Round(($primaryMbs.TotalItemSize.ToString().Split('(')[1].Split(' ')[0].Replace(',', '') / 1GB), 2)
        $itemCount = $primaryMbs.ItemCount
        $lastLogonTime = $primaryMbs.LastLogonTime
    }

    # 拉取存档邮箱统计数据(仅当存档激活时)
    if ($mbx.ArchiveStatus -eq "Active") {
        $archiveMbs = Get-MailboxStatistics $mbx.UserPrincipalName -Archive -ErrorAction SilentlyContinue
        if ($archiveMbs -and $archiveMbs.TotalItemSize -ne $null) {
            $archiveSize = [math]::Round(($archiveMbs.TotalItemSize.ToString().Split('(')[1].Split(' ')[0].Replace(',', '') / 1MB), 2)
        }
        else {
            $archiveSize = 0 
        }
    }
 
    $Result += New-Object -TypeName PSObject -Property $([ordered]@{ 
            UserName                    = $mbx.DisplayName
            UserPrincipalName           = $mbx.UserPrincipalName
            # 新增主邮箱相关字段
            MailboxSizeInGB             = $primarySizeGB
            ItemCount                   = $itemCount
            LastLogonTime               = $lastLogonTime
            # 原有存档相关字段
            ArchiveStatus               = $mbx.ArchiveStatus
            ArchiveName                 = $mbx.ArchiveName
            ArchiveState                = $mbx.ArchiveState
            ArchiveMailboxSizeInMB      = $archiveSize
            ArchiveWarningQuota         = if ($mbx.ArchiveStatus -eq "Active") { $mbx.ArchiveWarningQuota } Else { $null } 
            ArchiveQuota                = if ($mbx.ArchiveStatus -eq "Active") { $mbx.ArchiveQuota } Else { $null } 
            AutoExpandingArchiveEnabled = $mbx.AutoExpandingArchiveEnabled
        })
}

# 按需要的顺序输出所有字段,格式不会混乱
$Result | Select UserName, UserPrincipalName, MailboxSizeInGB, ItemCount, LastLogonTime, ArchiveMailboxSizeInMB, ArchiveWarningQuota, ArchiveQuota, AutoExpandingArchiveEnabled, ArchiveState | Format-Table

核心修改说明

  • 移除了额外生成第二个统计结果集的逻辑,直接在原有遍历单邮箱的循环中同时拉取主邮箱、存档邮箱的统计数据,天然保证数据按用户对齐,无需额外匹配
  • 修正了原有代码中拉取存档统计未加-Archive参数的问题,避免存档大小取值错误
  • 直接在有序属性表中新增主邮箱大小、项目数、上次登录时间三个字段,输出时直接指定字段顺序即可保证格式统一

内容的提问来源于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 18:39:00