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

PowerShell导出公共文件夹如何将FolderSize转为仅MB单位无括号

问题排查与修复方案

你代码里存在几个核心错误导致输出异常,逐一说明如下:

  • 语法错误:Select-Object的属性参数之间缺少逗号,LastModificationTime和后续的计算属性没有用逗号分隔,导致计算属性未被正确解析,所有行返回相同值
  • 不需要用正则处理大小字符串:Exchange PowerShell返回的TotalItemSize、FolderSize都是自带Value属性的强类型对象,直接调用内置方法即可转换单位,正则匹配反而容易因为系统语言、版本差异出现匹配失败
  • 变量未定义错误:原代码中没有定义$mepf变量,会导致PrimaryAddy和ForwardingAddy字段输出空值
  • 隐含逻辑问题:你按权限遍历输出记录,同一个文件夹会对应多条权限条目,后续统计总大小的时候会重复计算同一文件夹的容量,建议单独统计大小或者去重后求和

修正后完整可运行代码

# 自定义导出路径
$path = "C:\PublicFolder_Report.csv"
# 获取公共文件夹列表
$publicFolders = Get-PublicFolder "\SomePublicFolderName" -Recurse -ResultSize Unlimited

$publicFolders | ForEach-Object {
    $pf = $_
    if ($pf.MailEnabled) {
        # 补充获取启用邮件的公共文件夹属性,修复$mepf未定义问题
        $mepf = Get-MailPublicFolder -Identity $pf.Identity -ErrorAction SilentlyContinue
        # 获取文件夹统计,直接转换为MB单位
        $pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {
            $_.User -notmatch "Default|Anonymous|S-X-X-XX"
        } | Select-Object FolderPath, ItemCount, LastModificationTime,
        @{
            Name = "TotalItemSize (MB)"
            Expression = { [math]::Round($_.TotalItemSize.Value.ToMB(), 2) }
        },
        @{
            Name = "FolderSize (MB)"
            Expression = { [math]::Round($_.FolderSize.Value.ToMB(), 2) }
        }
        
        # 获取权限列表
        $perms = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {
            $_.User -notmatch "Default|Anonymous|S-X-X-XX"
        }
        
        # 遍历权限生成输出记录
        foreach($perm in $perms) {
            [PSCustomObject]@{
                PFName = $pf.Name
                PFIdentity = $pf.Identity
                MailEnabled = $pf.MailEnabled
                "FolderSize (MB)" = $pfstat.'FolderSize (MB)'
                "TotalItemSize (MB)" = $pfstat.'TotalItemSize (MB)'
                ItemCount = $pfstat.ItemCount
                LastModificationTime = $pfstat.LastModificationTime
                UserWithPerms = $perm.User
                AccessRights = $perm.AccessRights -join ","
                PrimaryAddy = $mepf.PrimarySmtpAddress
                ForwardingAddy = $mepf.ForwardingAddress
            }
        }
    }
} | Export-Csv $path -NoTypeInformation -Encoding UTF8

总大小统计方法

导出CSV后可以直接用Excel对FolderSize (MB)列求和,也可以直接在PowerShell中统计所有文件夹的总大小,避免重复计算:

$totalSizeMB = ($publicFolders | ForEach-Object {
    if ($_.MailEnabled) {
        $stat = Get-PublicFolderStatistics -Identity $_.Identity
        $stat.FolderSize.Value.ToMB()
    }
} | Measure-Object -Sum).Sum
Write-Host "所有公共文件夹总大小:$([math]::Round($totalSizeMB,2)) MB"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:03