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

PowerShell自定义pscustomobject中集成Measure-Object的使用问题

问题根因

你的原有脚本无法正确统计文件夹大小,核心问题出在size=measure-object -sum -property length这行:

  • 没有给Measure-Object传入待统计的文件集合,命令找不到要计算长度的目标对象
  • 没有提取命令返回结果的具体数值,Measure-Object执行后会返回一个包含Count、Sum、Average等属性的统计对象,直接赋值会把整个对象存入size字段,不是你要的大小数值
自定义对象中集成Measure-Object的可行性

完全可以。PowerShell支持在[pscustomobject]的属性赋值位置直接执行命令,只要用括号包裹命令表达式,将命令返回的目标属性值赋值给对应字段即可。

修正后的可运行脚本

以下脚本和你原有逻辑对齐,统计D盘下深度2以内的所有文件夹,返回完整路径、当前文件夹根目录下的文件总数、当前文件夹根目录下的文件总大小(单位:字节),最后按文件总数倒序排列:

Get-ChildItem d:\ -Directory -Recurse -Depth 2 -ErrorAction SilentlyContinue |
ForEach-Object{
    [pscustomobject]@{
        FullName  = $_.Fullname
        FileCount = $_.GetFiles().Count
        # 传入当前文件夹下的文件集合给Measure-Object,提取Sum属性为总大小
        Size = ($_.GetFiles() | Measure-Object -Sum -Property Length).Sum
    }
} | Sort-Object -Property FileCount -Descending

可选调整

  • 如果需要统计包含所有嵌套子文件夹在内的总文件数、总大小,把两个$_.GetFiles()替换为$_.GetFiles('*', [System.IO.SearchOption]::AllDirectories)即可
  • 如果需要把大小转为易读的GB单位,将Size行替换为以下内容(保留2位小数):
    Size = [math]::Round(($_.GetFiles() | Measure-Object -Sum -Property Length).Sum / 1GB, 2)
    
  • 如果需要忽略单个文件夹访问权限报错,可以在获取文件时加上错误静默参数,例如把Size行的文件获取部分替换为Get-ChildItem -Path $_.FullName -File -Recurse -ErrorAction SilentlyContinue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:18:24