powershell可高效采集、处理和可视化windows资源监视器核心指标,通过get-counter获取cpu、内存、磁盘、网络实时数据,支持导出csv、异常筛选、进程/磁盘/网络top分析及控制台动态看板。
powershell 可以高效采集、处理和可视化 windows 资源监视器(resource monitor)所关注的核心指标,如 cpu、内存、磁盘和网络使用率。它不依赖 gui,适合自动化巡检、异常告警或历史趋势分析。
获取实时资源使用数据
Windows 自带的 Get-Counter cmdlet 是最直接的方式,能访问 Performance Counter(性能计数器),对应资源监视器中显示的原始数据源。
- CPU 使用率:
"\Processor(_Total)\% Processor Time" - 内存使用率:
"\Memory\% Committed Bytes In Use" - 磁盘活动(总读写):
"\LogicalDisk(C:)\Disk Bytes/sec"(需替换盘符) - 网络发送/接收速率:
"\Network Interface(*)\Bytes Total/sec"(星号匹配所有网卡)
示例:每2秒采集一次 CPU 和内存数据,持续10次
1..10 | ForEach-Object {
$cpu = (Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 1).CounterSamples.CookedValue
$mem = (Get-Counter '\Memory\% Committed Bytes In Use').CounterSamples.CookedValue
[PSCustomObject]@{Time = Get-Date -Format "HH:mm:ss"; CPU = [math]::Round($cpu, 1); Memory = [math]::Round($mem, 1)}
Start-Sleep -Seconds 2
}
将数据导出为结构化报告
采集的数据可直接转为 CSV 或 Excel,便于归档或跨时段比对。
- 用
Export-Csv保存为带时间戳的文件,例如:-Path "C:\Reports\perf_$(Get-Date -Format 'yyyyMMdd_HHmm').csv" -NoTypeInformation - 添加列如
PeakDiskRead、AvgNetworkIn,通过Measure-Object计算统计值 - 结合
Where-Object筛选异常点,比如$data | Where-Object CPU -gt 90提取高负载时段
模拟资源监视器关键视图逻辑
资源监视器的“CPU”页列出进程 CPU 时间,“磁盘”页显示活跃文件,“网络”页展示连接。PowerShell 可近似还原:
- 高 CPU 进程:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, CPU, Id - 磁盘 I/O 排行:
Get-Process | Where-Object {$_.IOReadBytes -gt 0} | Sort-Object IOReadBytes -Descending | Select-Object Name, IOReadBytes, IOWriteBytes - 活跃网络连接:
Get-NetTCPConnection | Where-Object State -eq 'Established' | Group-Object -Property LocalAddress | Sort-Object Count -Descending | Select-Object Name, Count
注意:部分 I/O 属性(如 IOReadBytes)需以管理员权限运行才完整可见。
构建轻量级监控看板(控制台内)
无需第三方工具,用循环 + 清屏 + 格式化表格即可实现类 Resource Monitor 的动态刷新效果:
- 用
Clear-Host每次刷新前清屏 - 用
Write-Host配合颜色标记阈值(如 CPU >85% 显示红色) - 组合
Format-Table -AutoSize呈现进程 TOP5,宽度自适应终端 - 加入
Get-WmiObject Win32_OperatingSystem显示内存总量与可用量,补全资源监视器底部摘要栏信息











