powershell实时监控文件服务器存储占用率首选get-volume命令,精准筛选本地固定磁盘,支持阈值告警、每分钟刷新及多服务器批量检查。
用 powershell 实时监控文件服务器存储占用率,关键在于精准获取本地固定磁盘的容量与使用数据,并支持快速响应和持续观察。系统自带命令就能完成,不需要额外安装工具,重点是选对命令、加好过滤、设好阈值逻辑。
用 Get-Volume 获取准确的卷信息
这是推荐的首选方法,专为 Windows 卷管理设计,能自动排除光驱、U 盘、网络驱动器等干扰项,只返回真实可用的本地硬盘卷。
- 查所有带盘符的本地固定盘:Get-Volume | Where-Object {$_.DriveType -eq 'Fixed' -and $_.DriveLetter}
- 显示关键字段(盘符、剩余 GB、总 GB、使用率):
Get-Volume | Where-Object {$_.DriveType -eq 'Fixed' -and $_.DriveLetter} | Select-Object DriveLetter, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}, @{Name="Total(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="Used(%)";Expression={[math]::Round((($_.Size - $_.SizeRemaining)/$_.Size)*100,1)}} - 若只关注 C 盘,可简化为:Get-Volume -DriveLetter C | Select-Object DriveLetter, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}, @{Name="Used(%)";Expression={[math]::Round((($_.Size - $_.SizeRemaining)/$_.Size)*100,1)}}
设置阈值并实时触发提醒
监控的核心不是看数字,而是当空间低于安全线时立刻反馈。比如设定剩余空间低于 15% 或 20GB 就标红警告。
- 定义阈值:$minFreePercent = 15(即使用率超过 85% 触发)
- 遍历每个固定盘并判断:
Get-Volume | Where-Object {$_.DriveType -eq 'Fixed' -and $_.DriveLetter} | ForEach-Object {
$used = [math]::Round((( $_.Size - $_.SizeRemaining ) / $_.Size) * 100, 1)
if ($used -gt (100 - $minFreePercent)) {
Write-Host "⚠️ $($ _.DriveLetter): 使用率 $used%,剩余仅 $([math]::Round($_.SizeRemaining/1GB,2)) GB" -ForegroundColor Red
}
}
做成循环脚本实现每分钟刷新
把检查逻辑封装成可重复执行的脚本,配合 Start-Sleep 实现准实时刷新,适合在管理员终端中长期运行查看。
- 基础循环示例(每 60 秒刷新一次):
while ($true) {
Clear-Host
Write-Host "【$(Get-Date -Format 'HH:mm:ss')】文件服务器磁盘状态" -ForegroundColor Green
Get-Volume | Where-Object {$_.DriveType -eq 'Fixed' -and $_.DriveLetter} | Select-Object DriveLetter, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}, @{Name="Used(%)";Expression={[math]::Round((($_.Size - $_.SizeRemaining)/$_.Size)*100,1)}} | Format-Table -AutoSize
Start-Sleep -Seconds 60
} - 如需停止,按 Ctrl + C 即可中断循环
扩展到多台文件服务器批量检查
若管理多台文件服务器,可读取 CSV 列表(含 ServerName 列),通过 Invoke-Command 远程执行相同逻辑。
- 准备 CSV 文件(如 servers.csv):
ServerName
FS01.contoso.local
FS02.contoso.local - 批量执行命令:
$servers = Import-Csv .\servers.csv
foreach ($s in $servers) {
Invoke-Command -ComputerName $s.ServerName -ScriptBlock {
Get-Volume | Where-Object {$_.DriveType -eq 'Fixed' -and $_.DriveLetter} | Select-Object @{Name="Server";Expression={$using:s.ServerName}}, DriveLetter, @{Name="Free(GB)";Expression={[math]::Round($_.SizeRemaining/1GB,2)}}, @{Name="Used(%)";Expression={[math]::Round((($_.Size - $_.SizeRemaining)/$_.Size)*100,1)}}
}
}











