如何获取用户电脑所有PST文件并统计单文件及总大小
问题描述
我需要从电脑里找出所有.pst文件,想实现两个功能:一是显示每个文件的路径和对应的大小,二是算出所有这些文件的总大小。
现在用的PowerShell脚本只能统计文件数量,单独指定一个PST文件路径能正确拿到它的大小,但不知道怎么把结果存进变量来统计总大小,也不确定是不是必须逐个输出文件路径和大小才行。
现有脚本
Get-ChildItem -Path C:\users -Filter "*.pst" -Recurse | Select-Object -ExpandProperty Fullname For($i=0; $i -lt $path.Measure; $i++){ [pscustomobject] @{ PSTsFound = $path[$i] } (Get-Item -Path $path).Length/1MB }
单个文件获取大小的有效命令
(Get-Item -Path 'C:\users\user\Documents\Outlook Files\file@file.com.pst').Length/1MB
解决方案
1. 先把所有PST文件存到变量里
先一次性找出所有PST文件,把它们的完整对象(包含路径、大小等属性)存到变量里,这样后续操作不用反复扫描文件系统,效率更高:
$pstFiles = Get-ChildItem -Path C:\users -Filter "*.pst" -Recurse -File
2. 逐个输出文件路径和大小
直接遍历刚才存的变量,输出每个文件的路径和大小(单位转成MB,保留两位小数更直观):
$pstFiles | ForEach-Object { [pscustomobject]@{ 文件路径 = $_.FullName 大小(MB) = [math]::Round($_.Length / 1MB, 2) } }
3. 统计总大小
利用变量里的文件对象,直接计算总大小:
$总大小MB = [math]::Round(($pstFiles | Measure-Object -Property Length -Sum).Sum / 1MB, 2) Write-Host "所有PST文件总大小:$总大小MB MB"
整合版脚本(一步搞定所有操作)
如果想一次性完成列表展示和总大小统计,用这个脚本就行:
# 获取所有PST文件对象 $pstFiles = Get-ChildItem -Path C:\users -Filter "*.pst" -Recurse -File # 显示找到的PST文件列表 Write-Host "=== 找到的PST文件 ===" $pstFiles | ForEach-Object { [pscustomobject]@{ 文件路径 = $_.FullName 大小(MB) = [math]::Round($_.Length / 1MB, 2) } } | Format-Table -AutoSize # 显示总大小统计 $总大小MB = [math]::Round(($pstFiles | Measure-Object -Property Length -Sum).Sum / 1MB, 2) Write-Host "`n=== 总大小统计 ===" Write-Host "所有PST文件总大小:$总大小MB MB"
内容的提问来源于stack exchange,提问作者rpardue91
相关产品推荐
相关产品推荐

