powershell批量导出终端cpu与内存使用记录需基于get-counter和win32_operatingsystem采集,通过invoke-command远程执行,配合winrm配置、权限验证与容错处理,结果结构化为csv并支持定时任务与轻量分析。
用 powershell 批量导出企业终端的 cpu 与内存使用记录,核心是远程采集 + 定时采样 + 结构化存储。不依赖第三方工具,全程基于 windows 原生能力,关键在于稳定连接、合理采样、容错处理和统一格式。
CPU 与内存使用率的可靠采集方式
Windows 系统中,Get-Counter 是获取实时 CPU 使用率最准确的方法(基于性能计数器),而内存使用率需通过 Win32_OperatingSystem 计算得出,避免 WMI 延迟或缓存偏差:
- CPU:使用
Get-Counter '\Processor(_Total)\% Processor Time',返回即时、高精度百分比值 - 内存:读取
TotalVisibleMemorySize和FreePhysicalMemory,按公式(总 - 空闲) / 总 × 100计算使用率,结果保留一位小数 - 注意:不要用
Get-WmiObject Win32_Processor的LoadPercentage—— 该字段在多数系统中不可用或恒为 0
批量远程执行的前提与验证
脚本要真正落地,必须先确保网络与权限就绪,否则会批量失败:
- 目标终端需启用 WinRM(域内推荐执行
winrm quickconfig -force或通过组策略统一部署) - 防火墙放行 TCP 5985(HTTP)或 5986(HTTPS),建议域内优先用 5985 并启用 Kerberos 认证
- 执行账户须是目标机器本地 Administrators 组成员;跨域或非域主机需提前配置 CredSSP 或使用凭据对象
- 执行前可用
Test-WSMan -ComputerName PC01 -ErrorAction SilentlyContinue快速筛选连通性异常的设备
带时间戳的批量采集脚本结构
以下逻辑可封装为 .ps1 脚本,支持从 AD 自动拉取或从文本文件读取主机列表,每台机器独立采集并追加到同一 CSV:
- 对每台主机使用
Invoke-Command远程执行采集块,设置超时(-OperationTimeoutSec 30)和错误忽略(-ErrorAction SilentlyContinue) - 采集块内调用
Get-Counter和Get-CimInstance Win32_OperatingSystem,组合为[PSCustomObject],含字段:ComputerName、Timestamp、CPUUsage、MemUsage、TotalMemoryMB - 所有成功结果统一管道至
Export-Csv -Append -Encoding UTF8,避免并发写入冲突(PowerShell 7+ 支持,旧版本建议用临时数组再一次性导出) - 失败主机单独记录日志,如:
"PC01 : 连接超时或拒绝访问 —— $Error[0].Exception.Message"
结果整理与轻量分析建议
导出的 CSV 文件可直接用于后续处理:
- 用 Excel 或 Power BI 按
ComputerName分组,绘制 CPU/内存随时间变化折线图 - 筛选
CPUUsage > 90或MemUsage > 85的记录,定位长期高负载终端 - 结合
Get-ADComputer补充操作系统、位置等属性,生成带标签的健康度报表 - 如需持续监控,可将脚本注册为计划任务(每5分钟运行一次),并用
Get-Date -Format "yyyy-MM-dd"动态生成每日日志文件名











