Get-Counter 是干什么的
Get-Counter 是 PowerShell 读取性能计数器的入口,把图形界面上“看曲线”的能力搬到命令行:指定计数器路径、采样间隔与采样次数,就能拿到一组数值,再据此做阈值判断与记录。它是无人值守巡检的常用工具,可以在没有图形界面的服务器上按计划采集关键指标。主要障碍是计数器名称在中文系统里会本地化。
基本信息
| 适用平台 | Windows 7 / Server 2008 R2 及以上,PowerShell 3.0+ |
|---|---|
| 语法 | Get-Counter '\对象(实例)\计数器' -SampleInterval 秒 -MaxSamples 次数 |
| 发现计数器 | Get-Counter -ListSet <集合名> | Select-Object -ExpandProperty Counter |
| 取值方式 | 结果对象的 CounterSamples.CookedValue 为数值 |
| 远程采样 | 指定 ComputerName(依赖相应权限与通道) |
典型使用场景
- 阈值巡检:定时采样 CPU、内存、磁盘队列并在越界时告警
- 故障复盘:在问题发生时按秒级采样,留下可用于分析的序列
- 容量评估:连续几天收集指标趋势,为扩容提供数据
- 验证优化效果:改动前后对比同一计数器的均值
- 无图形界面服务器:Server Core 上只能用命令行采样
常用示例
常用示例
# 采样 CPU 总占用:每 1 秒一次,共 10 次
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 1 -MaxSamples 10
# 取单个数值(可用内存 MB)
(Get-Counter '\Memory\Available MBytes').CounterSamples.CookedValue
# 多个计数器一次采完,减少调用开销
Get-Counter -Counter '\Processor(_Total)\% Processor Time','\Memory\Available MBytes','\PhysicalDisk(_Total)\Avg. Disk Queue Length' -MaxSamples 5
# 中文系统里发现可用计数器名
Get-Counter -ListSet Processor | Select-Object -ExpandProperty Counter
# 求采样平均值做基线
$s = Get-Counter '\Processor(_Total)\% Processor Time' -MaxSamples 30 -SampleInterval 1
($s.CounterSamples | Measure-Object CookedValue -Average).Average常用计数器
| 计数器路径 | 含义 | 异常参考 |
|---|---|---|
| \Processor(_Total)\% Processor Time | CPU 总占用率 | 长期高于 80% 需关注 |
| \Memory\Available MBytes | 可用物理内存 | 持续偏低会触发换页 |
| \PhysicalDisk(_Total)\Avg. Disk Queue Length | 磁盘平均队列 | 持续大于 2 表示排队明显 |
| \Network Interface(*)\Bytes Total/sec | 网卡吞吐 | 接近链路上限需扩容 |
中文系统上的计数器名会被本地化,写死英文路径的脚本在中文机器上可能报错。兼容做法是先用 -ListSet 取可用名称,或使用系统提供的本地化名称列表。
采样次数与间隔决定了资源开销:高频长时采样会给目标机和自己都带来负担。做阈值巡检用分钟级间隔,只有在复现短时抖动时才用秒级。
远程采样依赖 WMI/性能库通道与足够权限,跨网段还要考虑防火墙。采不到数据时先验证通道,别先怀疑指标本身异常。