PowerShell使用Measure-Object计算目录大小时返回值不正确
问题解决思路
问题根源
计算目录大小的自定义属性表达式存在路径缺失问题:Get-ChildItem -Recurse -File -Force没有指定要统计的目标目录路径,默认会读取当前PowerShell会话的工作目录下的所有文件,因此所有目录的大小统计结果都是当前工作目录的总大小,自然全部相同。
修正后的代码
Get-ChildItem -Path $HDriveServer1 -Depth 1 -Directory -Force | Where-Object { $_.LastWriteTime -le (Get-Date).AddYears(-7)} | Select-Object Name, @{Name='Size(MB)';Exp={(Get-ChildItem -Path $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum / 1MB}}, LastWriteTime | Out-File $report
优化建议
- 如果需要更方便后续筛选、排序统计结果,可以把
Out-File $report替换为Export-Csv -Path $report -NoTypeInformation -Encoding UTF8,导出为CSV格式文件用Excel打开处理 - 目录体积较大时可以把单位换算为GB,把
/ 1MB改为/ 1GB即可 -ErrorAction SilentlyContinue参数可以跳过无权限访问的目录,避免脚本运行报错中断
内容的提问来源于stack exchange,提问作者Jay Phillips
相关产品推荐
相关产品推荐

