powershell通过对象管道统计磁盘空间:用get-psdrive快速查看本地驱动器,get-ciminstance获取精确卷信息,get-childitem递归分析目录大小,结果可排序、格式化、导出或告警。
powershell 对象管道统计服务器磁盘空间,核心在于利用 get-psdrive 或 get-wmiobject/get-ciminstance 获取结构化对象,再通过管道传递给 sort-object、select-object 等命令做筛选、排序和格式化——不是处理文本行,而是操作带属性的 .net 对象。
用 Get-PSDrive 快速看本地驱动器使用情况
这是最轻量、无需管理员权限的方式,适合快速查看 C:、D: 等逻辑驱动器:
Get-PSDrive -PSProvider FileSystem | Select-Object Name,Used,Free,DisplayRoot | Sort-Object Used -Descending- 输出字段是对象属性:
Used和Free单位是字节,可加计算列转为 GB:@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}} - 注意:
Get-PSDrive不显示网络映射驱动器(除非用-Scope Global),也不反映配额或压缩文件的实际磁盘占用
用 Get-CimInstance 查准物理磁盘容量与使用率
要获取真实卷信息(含 NTFS 压缩、硬链接、配额影响),应查 Win32_Volume 类:
Get-CimInstance Win32_Volume | Where-Object {$_.DriveType -eq 3} | Select-Object DriveLetter,Label,@{n='SizeGB';e={[math]::Round($_.Capacity/1GB,2)}},@{n='UsedGB';e={[math]::Round(($_.Capacity-$_.FreeSpace)/1GB,2)}},@{n='UsedPct';e={[math]::Round((1-$_.FreeSpace/$_.Capacity)*100,1)}} | Sort-Object UsedPct -Descending-
DriveType -eq 3过滤出本地硬盘卷(排除光驱、U盘等) -
FreeSpace是真正可用字节数,比Get-PSDrive的Free更可靠,尤其在启用了配额或存储分层时
按目录层级统计并管道排序大目录
若需定位“哪个文件夹吃掉最多空间”,不能只看驱动器,得深入路径。这时用 Get-ChildItem + ForEach-Object 构建对象流:
Get-ChildItem D:\Data -Directory | ForEach-Object { [PSCustomObject]@{Name=$_.Name;SizeGB=[math]::Round((Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum / 1GB, 2)} } | Sort-Object SizeGB -Descending | Select-Object -First 10- 关键点:每个目录生成一个自定义对象,
SizeGB属性由递归计算得出,整个结果仍是对象数组,可继续管道操作 - 加
-ErrorAction SilentlyContinue避免因权限不足中断;对超大目录,可先用du(Windows 10/11 自带)预筛:du -sh D:\Data\* | Sort-Object -Property @{Expression={$_.Length}; Ascending=$false}
导出结果供后续分析或告警
管道终点不只能是屏幕输出,还能无缝对接导出或条件判断:
- 存为 CSV:
| Export-Csv C:\Reports\DiskUsage.csv -NoTypeInformation - 发邮件告警:
| Where-Object {$_.UsedPct -gt 90} | Send-MailMessage -To "admin@corp" -Subject "高磁盘使用率预警" - 写入事件日志:
| ForEach-Object { Write-EventLog -LogName Application -Source "DiskMonitor" -EntryType Warning -EventId 1001 -Message "$($_.DriveLetter) 使用率 $($_.UsedPct)%" }











