powershell扫描文件服务器需分步执行:先用get-childitem遍历子目录统计大小并排序,加-silentlycontinue避开权限错误,-file确保只计文件,再按扩展名分组分析大类文件,最后导出csv供分析。
直接用 powershell 扫描文件服务器目录并统计占用,关键不是“一键出结果”,而是分步看清真实数据、避开权限错误和超时卡死。重点在于选对命令、加好过滤、控制深度。
先查顶层目录总大小(快速概览)
适合初步判断哪个盘或根目录最占空间。以 C:\Shares 为例:
- 打开 PowerShell(管理员权限非必须,但读取系统目录更稳)
- 运行:Get-ChildItem C:\Shares -Directory | ForEach-Object { [PSCustomObject]@{ Name = $_.Name; SizeGB = [math]::Round((Get-ChildItem $_.FullName -Recurse -File -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum / 1GB, 2) } } | Sort-Object SizeGB -Descending
- 说明:逐个遍历子文件夹,计算其下所有文件总大小(单位 GB),自动排序,大到小排列
避开权限报错和空目录干扰
实际环境中常因 NTFS 权限不足中断扫描,或大量空文件夹拉低参考价值:
- 加 -ErrorAction SilentlyContinue 跳过无权访问的子目录(如某些用户配置文件夹)
- 加 -File 参数确保只统计文件,不把文件夹本身当“1字节”计入
- 加 Where-Object {$_.SizeGB -gt 0.1} 过滤掉小于 100MB 的目录(避免列表过长)
按扩展名看谁在吃空间(定位大类文件)
比如发现视频、日志、备份包集中在哪——这对清理决策更实用:
- 运行:Get-ChildItem C:\Shares -Recurse -File -ErrorAction SilentlyContinue | Group-Object Extension | Sort-Object Count -Descending | Select-Object Name, Count, @{Name='TotalSizeGB';Expression={[math]::Round(($_.Group | Measure-Object Length -Sum).Sum / 1GB, 2)}} | Where-Object {$_.TotalSizeGB -gt 0.5} | Format-Table -AutoSize
- 结果示例:.log(842 个,共 12.6GB)、.vhdx(3 个,共 87GB)、.zip(17 个,共 5.3GB)
- 注意:.tmp、.bak、~$ 开头的临时文件常被忽略,但累积起来可能占数 GB
导出为 CSV 供后续分析或汇报
扫描耗时较长时,建议保存结果,避免重复执行:
- 把上面任一命令结尾加上:| Export-Csv C:\report\shares_usage.csv -NoTypeInformation -Encoding UTF8
- 生成的 CSV 可用 Excel 打开,按大小排序、筛选类型、做饼图
- 若需定期巡检,可封装成脚本,配合 Start-Transcript 记录执行时间与异常











