获取处理器 CPU 信息:批处理 / PowerShell 脚本 WMI / CIM(Windows Management Instrumentation)注册表Win32 API Windows Performance Counter 性能计数器 读取 CPU 型号、核心数、线程数、物理 CPU 个数、缓存、频率、虚拟化支持、特性集、温度、步进、插槽信息。
获取处理器 CPU 信息:批处理 / PowerShell 脚本 完整解构
分析框架:底层原理|依赖文件|依赖关系|配套链|逻辑链路|边界 目标:读取 CPU 型号、核心数、线程数、物理 CPU 个数、缓存、频率、虚拟化支持、特性集、温度、步进、插槽信息。
一、底层原理
Windows 下获取 CPU 信息有 4 条底层信息来源:
- WMI / CIM(Windows Management Instrumentation):最主流;内核把硬件信息导出到 WMI 仓库;脚本通过 WMI 客户端读取
Win32_Processor类。 - 注册表:
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0;系统启动时硬件枚举阶段把 CPU 信息写入注册表;只读,重启重新填充。 - Win32 API:
GetSystemInfo、GetLogicalProcessorInformationEx;原生 API,读取内核处理器拓扑(物理核、逻辑核、NUMA、插槽)。PowerShell 底层部分命令封装该 API。 - Windows Performance Counter 性能计数器:
\Processor Information,读取实时频率、负载。
批处理 (
wmic) 本质就是 WMI 命令行客户端;PowerShellGet‑CimInstance是新一代 WMI 实现,替代老旧 WMIC。
重要区分:
- 型号、名称、步进、缓存:来自 BIOS / ACPI 枚举,存入 WMI / 注册表。
- CPU 拓扑(物理 CPU、核心、超线程):内核 HAL (hal.dll) 解析 APIC 高级可编程中断控制器拓扑得到。
- 当前运行频率:性能计数器,实时动态变化,不等于标称最大频率。
Windows 获取 CPU 信息 4 大信息来源完整解构
分析框架:底层原理|依赖文件|依赖关系|配套链|逻辑链路|边界 4 个数据源:WMI‑CIM、
HKLM\HARDWARE内存注册表、Win32 处理器拓扑 API、PDH 性能计数器
一、底层原理
Windows 没有单一 “CPU 信息数据库”,4 套数据源分别来自系统启动不同阶段的硬件枚举,信息来源、更新时机、数据语义各不相同,不可互相完全替代。
- WMI / CIM(Win32_Processor、Win32_FeatureInfo) PNP/ACPI/hal.dll 在开机硬件枚举采集 CPU 型号、步进、插槽、缓存、虚拟化固件状态,交由 WMI 提供程序做对象封装;向上暴露 WMI 类。
WMI 不是直接读硬件寄存器;WMI 是中间抽象层,数据来源于 HAL、PNP 管理器,再加工后对外输出。
- 内存注册表
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\<n>HARDWARE是运行时内存配置单元,不持久化到磁盘 hive 文件。 系统开机:PNP 总线枚举 → HAL 解析 ACPI MADT → 将 CPU 名称、厂商 ID、标识符写入该内存注册表项;关机全部销毁,每次开机重建。
仅保存基础标识字符串;不存放拓扑(核心 / 线程)、缓存大小、实时频率。
- Win32 API
GetSystemInfo/GetLogicalProcessorInformationEx直接内核态调用 HAL 接口,读取 APIC 高级中断控制器拓扑;返回原始处理器拓扑:物理 CPU、物理核心、逻辑处理器、NUMA 节点、处理器组、插槽关系。
这是 Windows 内部最权威拓扑来源;WMI 的 NumberOfCores/NumberOfLogicalProcessors 底层也是取自这套 API,再做封装输出。
- PDH 性能计数器
\Processor Information内核 CPU 电源管理模块跟踪 CPU P‑state、C‑state、运行周期;将动态实时频率、负载、性能百分比输出到内核性能计数器;用户态通过pdh.dll读取。
只反映运行时动态状态;不含 CPU 静态规格(型号、缓存、步进)。
关键区分静态 / 动态数据
- 静态规格(型号、步进、缓存、插槽、指令集):WMI、内存注册表、原生 CPUID 指令
- 拓扑关系(物理 CPU、核、线程、NUMA):
GetLogicalProcessorInformationExAPI(权威) - 动态运行数据(当前频率、负载):PDH 性能计数器
二、依赖文件
| 数据源 | 涉及文件 | 类型 | 作用 |
|---|---|---|---|
| WMI‑CIM | wmiprvse.exe |
用户态服务进程 | WMI 提供程序宿主进程 |
winmgmt服务 |
系统服务 | WMI 总服务 | |
Microsoft.Management.Infrastructure.dll |
.NET 程序集 | PowerShell Get‑CimInstance客户端库 |
|
wmic.exe |
可执行 | 老旧 WMI 命令行客户端,已弃用 | |
hal.dll |
内核驱动 | HAL 硬件抽象层,硬件信息原始来源 | |
| 内存注册表 CPU 分支 | reg.exe |
命令行工具 | 读取注册表工具 |
配置单元HARDWARE |
内存虚拟 hive | 开机由 PNP/HAL 动态生成,不落地磁盘 | |
| Win32 拓扑 API | kernel32.dll |
用户态 DLL | 导出GetSystemInfo、GetLogicalProcessorInformationEx |
hal.dll |
内核驱动 | 内核接口,返回处理器原始拓扑 | |
| PDH 性能计数器 | pdh.dll |
用户态 DLL | 性能计数器查询 API |
perfdisk.dll/ 内核计数器 |
内核导出 | CPU 运行时统计数据 |
三、依赖关系
1. WMI / CIM 依赖链
hal.dll(硬件枚举) → WMI提供程序 → winmgmt(wmiprvse.exe) → Get‑CimInstance / wmic.exe
winmgmt服务停止:WMI 类全部不可访问;- WMI 内部拓扑字段本质调用
GetLogicalProcessorInformationEx;WMI 是对 API 结果再封装,不是原生来源; - BIOS ACPI MADT 表异常 → HAL 解析出错 → WMI 输出错误核心数。
2. HKLM\HARDWARE 注册表依赖链
系统启动 → PNP总线枚举 → hal.dll解析ACPI → 填充内存HARDWARE注册表分支
- 仅开机阶段填充;运行时 CPU 热变更一般不会自动刷新该注册表;
- 该分支完全驻留内存;磁盘上不存在对应的注册表文件;regedit 看到的是内存镜像;
- 不提供拓扑信息,仅标识字符串。
3. Win32 拓扑 API 依赖链
kernel32.dll API → ntdll.dll → hal.dll内核接口 → ACPI/MADT APIC硬件表
- 不需要 WMI、不需要注册表;API 可以独立获取拓扑;WMI 反而依赖这套 API;
- 权限:普通用户即可读取处理器拓扑;
- 若固件 MADT 表损坏,API 直接返回错误拓扑,操作系统层面无法修复。
4. PDH 性能计数器依赖链
内核CPU电源管理 → 内核性能计数器 → pdh.dll → PowerShell Get‑Counter / perfmon
- 依赖性能计数器库完好;计数器损坏会导致读不到实时频率;
- 与 WMI、注册表完全解耦;即使 WMI 挂掉,依然可以读取 CPU 实时负载、当前频率。
交叉依赖总结
- WMI 同时依赖:HAL 硬件枚举 + 部分读取内存注册表字符串 + 调用拓扑 Win32API;
- 内存注册表只来自 PNP+HAL;不依赖 WMI;
- 拓扑 API 只依赖 HAL 内核,不依赖 WMI、注册表;
- PDH 性能计数器来自内核运行时统计,和静态硬件规格无关。
四、配套链
4.1 WMI‑CIM 配套
- PowerShell:
Get‑CimInstance Win32_Processor、Get‑CimInstance Win32_FeatureInfo - 批处理:
wmic cpu get - 系统工具:
msinfo32.exe,底层调用 WMI
4.2 内存注册表配套
- cmd:
reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" - regedit 手动浏览查看
只能拿 CPU 名字、VendorIdentifier,不能做核心 / 线程判断。
4.3 Win32 拓扑 API 配套
- 原生 C/C++ 直接调用
GetLogicalProcessorInformationEx; - PowerShell 通过
Add‑Type内嵌 C# 调用该 API,绕过 WMI 获取最可靠拓扑; - Task 管理器、资源监视器内部使用这套 API;
优势:WMI 故障时依然可以拿到 CPU 拓扑。
4.4 PDH 性能计数器配套
- Perfmon 图形监视器
- PowerShell
Get‑Counter '\Processor Information(*)\% Processor Performance' - typeperf.exe 命令行计数器采集
五、逻辑链路
链路 1:读取 CPU 信息 —— WMI‑CIM
- PowerShell 执行
Get‑CimInstance Win32_Processor Microsoft.Management.Infrastructure.dll发起 CIM 请求到winmgmt服务- WMI 提供程序内部: ① 从 hal.dll 获取硬件信息; ② 调用
GetLogicalProcessorInformationEx拿到拓扑; ③ 读取内存注册表拿到 CPU 名称字符串; - 组装为
Win32_Processor对象实例返回; - PowerShell 输出属性。
链路 2:读取 CPU 信息 —— 内存注册表
reg.exe访问HKLM\HARDWARE配置单元;- 操作系统内核返回内存中保存的 PNP 枚举结果;
- 直接输出字符串;
不经过 WMI,不经过性能计数器;无拓扑数据。
链路 3:读取 CPU 拓扑 —— Win32 API
- 用户态程序调用
GetLogicalProcessorInformationEx(kernel32.dll) - 陷入内核,调用 HAL 驱动接口
- HAL 读取 ACPI MADT/APIC 硬件表,返回处理器拓扑结构体(物理 CPU、核心、逻辑 CPU、NUMA)
- 数据返回用户态;
完全绕开 WMI、注册表。
链路 4:读取实时频率负载 —— PDH 性能计数器
pdh.dll向内核查询Processor Information计数器;- 内核读取 CPU 电源管理 P‑state 运行时状态;
- 将实时频率、负载百分比返回用户态;
只拿运行时动态数据,不访问任何静态硬件规格。
六、边界(约束、坑点、失效条件)
6.1 WMI‑CIM 边界
winmgmt服务停止、WMI 仓库损坏:所有 WMI 类读取失败;- PE 环境默认无 WMI;
- 虚拟机环境:WMI 拿到的 CPU 型号、拓扑是 Hypervisor 上报的虚拟硬件,不是物理主机真实硬件;
- 旧 Windows 版本
Win32_Processor的NumberOfCores存在已知 Bug;此时必须使用原生 Win32 API 作为校验基准; - 新指令集如 AVX‑512,
Win32_FeatureInfoWMI 类不覆盖,需要 CPUID 汇编指令。
6.2 内存注册表 HKLM\HARDWARE 边界
- 纯内存配置单元,关机全部丢失,不能修改保存;
- 只有 CPU 名称、厂商 ID,没有核心数、线程、缓存、频率,不能用于拓扑判断;
- CPU 热插拔场景,该注册表不会自动同步刷新;
- 多物理 CPU,注册表会生成
0,1,2…多个子项。
6.3 Win32 拓扑 API 边界
- API 返回结果质量完全取决于 BIOS ACPI MADT 表;固件缺陷则拓扑错误,操作系统无法修复;
- API 只输出拓扑关系;不返回 CPU 型号、缓存、步进;拓扑 API 只管 “有多少核,怎么组织”,不管 CPU 是什么型号;
- 普通用户权限即可调用,不需要管理员。
6.4 PDH 性能计数器边界
- 只能读取当前动态频率、负载,拿不到 CPU 静态规格;
- 计数器库损坏,返回空值;
- 虚拟机环境,CPU 实时频率往往被 Hypervisor 屏蔽,读数无意义;
MaxClockSpeed标称最大频率不是来自 PDH 计数器,来自 WMI。
6.5 交叉边界(工程上最容易踩坑)
- 现象:WMI 读出来核心数异常;
根因:WMI 封装层 Bug,优先改用
GetLogicalProcessorInformationExAPI 校验。
- 现象:注册表能读到 CPU 名字,但 WMI 全部为空;
根因:HAL 硬件枚举正常,但 WMI 服务 / 仓库损坏。
- 现象:WMI 正常,但读不到实时 CPU 频率;
根因:PDH 性能计数器损坏,和 WMI 无关。
- 虚拟机综合表现:
- 内存注册表、WMI:返回虚拟化后的 CPU 标识;
- Win32 拓扑 API:返回虚拟机内虚拟 CPU 拓扑;
- PDH 计数器:大多无法得到真实物理 CPU 频率。
6.6 选型工程建议
| 采集目标 | 优先数据源 | 备选数据源 |
|---|---|---|
| CPU 型号、步进、插槽、缓存 | WMI‑CIM Win32_Processor | 内存注册表(仅名称) |
| 物理 CPU / 核心 / 线程 / NUMA 拓扑 | GetLogicalProcessorInformationEx API |
WMI(仅作参考,旧系统存在 Bug) |
| 指令集特性 (SSE/AVX) | WMI Win32_FeatureInfo | CPUID 原生汇编(完整指令集) |
| 当前实时频率、CPU 负载 | PDH 性能计数器 | 无 |
工程巡检最佳实践:拓扑不要只信任 WMI,重要服务器建议用原生 Win32 API 做二次校验。
二、依赖文件
| 组件 | 文件名 | 类型 | 作用 |
|---|---|---|---|
| WMI 服务进程 | wmiprvse.exe |
用户态服务进程 | WMI 提供程序宿主,提供 Win32_Processor 数据 |
| CIM/WMI 客户端 (PowerShell) | Microsoft.Management.Infrastructure.dll |
.NET 程序集 | PowerShell Get‑CimInstance底层库 |
| 旧 WMI 命令行 | wmic.exe |
可执行程序 | 批处理常用 wmic,已被微软标记弃用 |
| 系统硬件抽象层 | hal.dll |
内核驱动 | 解析 CPU APIC 拓扑,输出处理器拓扑信息 |
| 注册表读取 | reg.exe |
命令行工具 | 批处理读取 HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor |
| 性能计数器 API | pdh.dll |
用户态 DLL | 读取 CPU 实时运行频率,负载 |
| 注册表配置单元 | HARDWARE 虚拟配置单元 |
内存注册表 | 不写入磁盘,系统启动时动态生成,关机消失 |
注册表
HKLM\HARDWARE:内存中临时注册表,重启全部重建;不能永久写入。
三、依赖关系
- WMI 强依赖
Winmgmt服务(Windows Management Instrumentation) 服务停止:wmic、Get‑CimInstance全部报错无法读取 CPU 信息。 - 拓扑信息依赖 HAL 硬件抽象层 hal.dll 在系统启动阶段解析 ACPI/MADT APIC 表,识别:物理插槽、物理核心、逻辑处理器、NUMA 节点;如果 BIOS 固件 ACPI 表异常,WMI 读出核心数 / 线程数会错误。
- 注册表 HARDWARE 配置单元依赖硬件枚举 系统开机 PNP 枚举硬件完成之后才填充 CPU 注册表项;休眠 / 热重启会刷新;该分支不会保存到硬盘注册表文件。
- WMIC 弃用说明: wmic.exe 调用旧版 WMI COM 接口;Win10/11 仍然自带,但微软官方不推荐;优先使用
Get‑CimInstance。 - 性能计数器依赖 PerfMon 服务;计数器损坏,则无法读取实时 CPU 频率。
- 权限依赖:
- CPU 名称、缓存、核心数:普通用户权限即可读取。
- 部分低级硬件特性、NUMA 完整拓扑:需要管理员权限。
四、配套链
4.1 批处理 (BAT) 常用方式
- wmic.exe 调用 WMI
Win32_Processor
wmic cpu get Name,NumberOfCores,NumberOfLogicalProcessors,MaxClockSpeed
- reg.exe 读取 HARDWARE 注册表
reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0"
4.2 PowerShell 推荐脚本(Get‑CimInstance,现代替代 wmic)
# 获取处理器基础信息 WMI‑CIM
Get‑CimInstance Win32_Processor | Select‑Object `
Name,Manufacturer,MaxClockSpeed,CurrentClockSpeed,
NumberOfCores,NumberOfLogicalProcessors,NumberOfProcessors,
L2CacheSize,L3CacheSize,VirtualizationFirmwareEnabled,
SocketDesignation,Stepping
# 获取完整处理器拓扑(调用Win32API GetLogicalProcessorInformationEx)
$procInfo = Get‑CimInstance Win32_Processor | Where‑Object {$_.DeviceID}
$procInfo | Format‑List *
# 读取实时CPU频率来自性能计数器
Get‑Counter '\Processor Information(*)\% Processor Performance'
4.3 底层 Win32 API(C/C++,PowerShell 可通过 Add‑Type 调用)
GetLogicalProcessorInformationEx 获取完整 NUMA、插槽、物理 / 逻辑核映射;
WMI
Win32_Processor部分老旧 Windows 版本拓扑字段有 bug,最精准拓扑来自这套原生 API。
4.4 运维配套工具
msinfo32.exe:系统信息,内部调用 WMIwmic cpu:旧命令行- TaskMgr 任务管理器:读取 HAL 拓扑 + 性能计数器
五、逻辑链路
链路 A:WMI / Get‑CimInstance(PowerShell 主流路径)
- PowerShell 调用
Get‑CimInstance Win32_Processor,调用Microsoft.Management.Infrastructure.dll - 请求转发到系统服务
winmgmt(wmiprvse.exe)WMI 提供程序 - WMI 内部调用 HAL hal.dll 接口,读取 CPU 拓扑、硬件 ID;同时读取内存注册表 HARDWARE 分支
- WMI 组装成
Win32_Processor对象返回给 PowerShell - PowerShell 格式化输出对象属性。
链路 B:批处理 wmic.exe
- 批处理运行 wmic.exe;wmic 调用旧版 WMI COM 接口;
- 同样接入 winmgmt 服务,获取 Win32_Processor 实例;
- wmic 格式化文本输出到控制台。
链路 C:reg.exe 读取注册表获取 CPU 信息
- reg.exe 访问
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\x - HARDWARE 配置单元驻留内存,hal.dll+PNP 管理器在系统启动阶段填充;不是磁盘上的 registry hive
- reg 直接读出字符串输出。
⚠️注意:注册表这里只保存基础名字、标识符;拓扑(核心 / 线程数)注册表不提供,拓扑只能来自 HAL/WMI/API。
链路 D:读取实时 CPU 频率(性能计数器路径)
- PowerShell Get‑Counter 调用 pdh.dll
- pdh.dll 读取内核性能计数器,内核跟踪 CPU P‑state 功耗状态,得到当前实际运行频率。
MaxClockSpeed(标称最大频率)来自 WMI;CurrentClockSpeed 实时频率来自性能计数器。
六、边界(限制、坑点、失效条件)
1 WMI 相关边界
Winmgmt服务停止 / 损坏 → wmic、Get‑CimInstance 全部失效。- 部分精简版系统、PE 系统 WMI 被裁剪,无法读取 CPU 信息。
- 虚拟机环境:WMI 返回的 CPU 型号是虚拟机 Hypervisor 报告的,不是物理主机真实 CPU。
- 部分老旧 Windows Server,
Win32_Processor的NumberOfCores存在已知 Bug,物理核心数读取错误;此时要靠GetLogicalProcessorInformationEx原生 API 获取准确拓扑。
2 注册表 HARDWARE 边界
HKLM\HARDWARE是内存临时注册表,关机全部丢失;修改这里没有任何持久效果。- 注册表只存 CPU 名称、VendorIdentifier、Identifier;没有核心、线程、缓存拓扑数据,不能用来判断超线程。
3 频率字段常见误区
MaxClockSpeed:WMI 读取的 CPU 标称最大 MHz,固定值。CurrentClockSpeed:实时运行频率,受功耗、负载、节能策略动态变化;空闲时会远低于 MaxClockSpeed。
不要拿 CurrentClockSpeed 判断 CPU 规格,只能看实时状态。
4 虚拟化字段边界
VirtualizationFirmwareEnabled:代表固件 BIOS 是否开启虚拟化;不等于当前系统是否启用 Hyper‑V/WSL2。
5 WMIC 弃用边界
wmic.exe 在新版本 Windows 虽然还在,但微软标记为已弃用;未来版本可能移除;脚本开发优先Get‑CimInstance。
6 权限边界
- 普通用户可读:CPU 名称、缓存、核心数、最大频率。
- 部分 NUMA、高级处理器关系,需要管理员权限。
7 BIOS / 固件异常边界
BIOS ACPI MADT 表错误,HAL 解析拓扑出错,WMI 输出错误的核心 / 线程数;属于固件层面问题,操作系统脚本无法修复。
8 多物理 CPU 插槽边界
多 CPU 主板,Win32_Processor会返回多条实例,每一条对应一个物理插槽 CPU;脚本循环遍历全部实例,不要只读取第 0 号。
9 PE 环境边界
Windows PE 预安装环境:HAL 可用,但 WMI 默认未加载;只能通过 reg 读取 CPU 名称,无法读取 WMI 拓扑。
典型故障清单
- wmic cpu 返回空白:Winmgmt WMI 服务异常。
- 核心数读取错误:BIOS MADT APIC 表缺陷;旧系统 WMI 类 Bug。
- CurrentClockSpeed 数值很低:CPU 进入节能降频,不是故障。
- 虚拟机下 CPU 型号与物理机不一致:Hypervisor 向虚拟机上报虚拟 CPU 标识符。
完整可直接使用脚本示例
1)PowerShell 完整脚本(CIM,推荐)
# 获取完整CPU信息
$cpus = Get-CimInstance Win32_Processor
foreach($cpu in $cpus)
{
Write‑Host "==== CPU插槽:$($cpu.SocketDesignation) ===="
Write‑Host "型号: $($cpu.Name)"
Write‑Host "厂商: $($cpu.Manufacturer)"
Write‑Host "标称最大频率(MHz): $($cpu.MaxClockSpeed)"
Write‑Host "当前运行频率(MHz): $($cpu.CurrentClockSpeed)"
Write‑Host "物理核心数: $($cpu.NumberOfCores)"
Write‑Host "逻辑线程数: $($cpu.NumberOfLogicalProcessors)"
Write‑Host "L2缓存 KB: $($cpu.L2CacheSize)"
Write‑Host "L3缓存 KB: $($cpu.L3CacheSize)"
Write‑Host "固件虚拟化开启: $($cpu.VirtualizationFirmwareEnabled)"
}
2)批处理 BAT 脚本(兼容旧系统)
@echo off
echo === CPU信息(WMI wmic) ===
wmic cpu get Name,Manufacturer,MaxClockSpeed,CurrentClockSpeed,NumberOfCores,NumberOfLogicalProcessors,SocketDesignation
echo.
echo === 读取注册表CPU名称 ===
reg query "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0" /v ProcessorNameString
pause
PowerShell 完整实例代码:CPU 全量信息采集
采集项:CPU 型号、厂商、步进、插槽、物理 CPU 个数、物理核心、逻辑线程、各级缓存、标称 / 实时频率、固件虚拟化支持、CPU 特性集、CPU 温度 说明:
- 温度依赖主板 BIOS/WMI 传感器;虚拟机一般拿不到温度;部分精简主板无传感器数据返回
$nullWin32_Processor不直接输出 CPU 指令集特性,指令集通过Get‑CimInstance Win32_FeatureInfo获取- 物理 CPU 个数 = 返回
Win32_Processor实例总数量- 需要管理员权限,部分硬件传感器、特性集需要提升权限
<#
.SYNOPSIS
CPU完整信息采集脚本
采集字段:型号、步进、插槽、物理CPU数、物理核、逻辑线程、缓存、频率、虚拟化、指令集特性、CPU温度
#>
#region 1.基础CPU信息 Win32_Processor
$cpuList = Get‑CimInstance Win32_Processor
$physicalCpuCount = ($cpuList | Measure‑Object).Count
Write‑Host "`n==================== 全局概览 ===================="
Write‑Host "物理CPU插槽总数:$physicalCpuCount`n"
# 读取CPU指令集/特性集
$cpuFeatures = Get‑CimInstance Win32_FeatureInfo
# 读取硬件传感器(CPU温度,来自WMI Win32_PerfFormattedData_Counters_ThermalZoneInformation)
$thermalInfo = Get‑CimInstance Win32_PerfFormattedData_Counters_ThermalZoneInformation -ErrorAction SilentlyContinue
foreach ($cpu in $cpuList)
{
Write‑Host "`n=================================================="
Write‑Host "【CPU插槽】: $($cpu.SocketDesignation)"
Write‑Host "型号 : $($cpu.Name?.Trim())"
Write‑Host "制造商 : $($cpu.Manufacturer?.Trim())"
Write‑Host "步进(Stepping): $($cpu.Stepping)"
Write‑Host "设备ID : $($cpu.DeviceID)"
Write‑Host "标称最大频率(MHz) : $($cpu.MaxClockSpeed)"
Write‑Host "当前实时频率(MHz) : $($cpu.CurrentClockSpeed)"
Write‑Host "物理核心数 : $($cpu.NumberOfCores)"
Write‑Host "逻辑线程数 : $($cpu.NumberOfLogicalProcessors)"
Write‑Host "L1缓存(KB) : $($cpu.L1CacheSize)"
Write‑Host "L2缓存(KB) : $($cpu.L2CacheSize)"
Write‑Host "L3缓存(KB) : $($cpu.L3CacheSize)"
Write‑Host "固件虚拟化开启 : $($cpu.VirtualizationFirmwareEnabled)"
# 当前CPU对应指令集特性过滤
$thisCpuFeature = $cpuFeatures | Where‑Object {$_.DeviceID -eq $cpu.DeviceID}
Write‑Host "`n----- CPU指令集特性集 -----"
if($thisCpuFeature)
{
Write‑Host "MMX : $($thisCpuFeature.MMX)"
Write‑Host "SSE : $($thisCpuFeature.SSE)"
Write‑Host "SSE2 : $($thisCpuFeature.SSE2)"
Write‑Host "SSE3 : $($thisCpuFeature.SSE3)"
Write‑Host "SSE41 : $($thisCpuFeature.SSE41)"
Write‑Host "SSE42 : $($thisCpuFeature.SSE42)"
Write‑Host "AVX : $($thisCpuFeature.AVX)"
Write‑Host "AVX2 : $($thisCpuFeature.AVX2)"
Write‑Host "NX保护 : $($thisCpuFeature.DEP)"
Write‑Host "HyperThreading : $($thisCpuFeature.HyperThreading)"
}
else
{
Write‑Host "无法读取该CPU指令集特性"
}
}
#region CPU温度读取
Write‑Host "`n=================================================="
Write‑Host "----- CPU温度信息 -----"
if($thermalInfo)
{
foreach($zone in $thermalInfo)
{
# 单位:0.1摄氏度,做换算
$tempC = $zone.Temperature / 10
Write‑Host "热区名称:$($zone.Name) 温度: $tempC ℃"
}
}
else
{
Write‑Host "警告:无法读取CPU温度,可能原因:虚拟机 / 主板无传感器 / WMI传感器提供程序缺失"
}
#endregion
Write‑Host "`n采集完成"
BAT 批处理版本(能力受限说明)
⚠️批处理
wmic无法读取指令集特性集、CPU 温度,只能读取基础硬件规格;仅适合简易巡检
@echo off
chcp 65001 >nul
echo ==================== CPU基础信息(BAT wmic) ====================
wmic cpu get Name,Manufacturer,Stepping,SocketDesignation,MaxClockSpeed,CurrentClockSpeed,NumberOfCores,NumberOfLogicalProcessors,L1CacheSize,L2CacheSize,L3CacheSize,VirtualizationFirmwareEnabled
echo.
echo 注意:bat版本不支持读取:CPU温度、指令集特性集,建议使用PowerShell完整脚本
pause
边界说明(实例代码约束)
- CPU 温度边界
- 虚拟机环境:
Win32_PerfFormattedData_Counters_ThermalZoneInformation返回空,无温度; - 部分 OEM 精简主板不导出热区传感器 WMI 数据;
- 单位:WMI 原始单位是 0.1℃,脚本已经做除法换算为摄氏度。
- 虚拟机环境:
- 指令集特性 Win32_FeatureInfo 边界
- 旧 Windows Server 2008 及更早部分字段缺失;
- 部分新指令集 AVX‑512 不在该 WMI 类,该 WMI 类只包含经典 SSE/AVX1/AVX2;
- 如需完整 CPUID 原始寄存器信息,需要调用 C# 内嵌
CPUID汇编指令。
- 虚拟化字段边界
VirtualizationFirmwareEnabled= BIOS 开启虚拟化;不等于系统正在运行 Hyper‑V/WSL2。 - 多物理 CPU 场景 脚本自动遍历全部
Win32_Processor实例,$physicalCpuCount为物理 CPU 插槽数量。 - 权限边界 建议以管理员 PowerShell 运行;普通用户部分传感器、特性集字段返回空。
- PE 环境边界 PE 下 WMI 未初始化,脚本无法执行,仅 bat 的 reg 读取 CPU 名称可用。
扩展:如果需要读取原生 CPUID 寄存器(获取全部 CPUID 特性)
PowerShell 可以内嵌 C# 调用 CPUID 汇编指令,获取完整的厂商、系列、型号、步进、全部扩展指令集(AVX512 等)。 如果你需要,我可以提供该内嵌代码片段。
输出样例片段参考
==================== 全局概览 ====================
物理CPU插槽总数:1
==================================================
【CPU插槽】: SOCKET 0
型号 : Intel(R) Core(TM) i7‑12700H
制造商 : GenuineIntel
步进(Stepping): 9
设备ID : CPU0
标称最大频率(MHz) : 2300
当前实时频率(MHz) : 1800
物理核心数 : 14
逻辑线程数 : 20
L1缓存(KB) : 448
L2缓存(KB) : 17920
L3缓存(KB) : 24576
固件虚拟化开启 : True
----- CPU指令集特性集 -----
MMX : True
SSE : True
SSE2 : True
……
PowerShell 脚本:
Get-WmiObject -Class Win32_Processor
默认是
横向布局(属性名称在左侧)
| 属性名称 | 值 |
|---|---|
| 处理器描述 (Caption) | Intel64 Family |
| 设备ID (DeviceID) | CPU0 |
| 制造商 (Manufacturer) | GenuineIntel |
| 最大时钟频率 (MaxClockSpeed) | 1512 MHz |
| 处理器名称 (Name) | Intel(R) Core(TM) CPU @ GHz |
| 插槽规格 (SocketDesignation) | U3E1 |
表格2:纵向布局(属性名称在上方)
| 属性名称 (Property Name) |
处理器描述 (Caption) |
设备ID (DeviceID) |
制造商 (Manufacturer) |
最大时钟频率 (MaxClockSpeed) |
处理器名称 (Name) |
插槽规格 (SocketDesignation) |
|---|---|---|---|---|---|---|
| 值 (Value) |
Intel64 Family | CPU0 | GenuineIntel | 1512 MHz | Intel(R) Core(TM) CPU @ GHz | U3E1 |
PowerShell 脚本或批处理脚本来获取与处理器相关的信息。以下是一些脚本:
PowerShell 脚本:
Get-WmiObject -Class Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
| 处理器名称 (Processor Name) | 物理核心数 (Number of Cores) | 逻辑处理器数 (Number of Logical Processors) |
|---|---|---|
| Intel(R) Core(TM) xxxxx | 2 | 4 |
批处理脚本:
wmic cpu get Name, NumberOfCores, NumberOfLogicalProcessors
这些脚本将提供有关 CPU 的信息,包括核心数量和逻辑处理器数量。您可以使用这些信息了解系统的硬件配置,并了解是否支持大核小核调度。
Get-Counter 命令输出展示了系统中各个处理器核心的实时使用情况。我已经将这些数据整理成纵向布局的表格,方便您查阅。
处理器时间使用情况
PS C:\Users\Administrator> Get-Counter -Counter "\Processor(*)\% Processor Time"
处理器时间使用监控表
| 时间戳 (Timestamp) | 计数器路径 (Counter Path) | 处理器时间 (%) |
|---|---|---|
| 2xx5-11-11 星期三 16:03:14 | \\win- 3\processor(0)% processor time | 8.14 |
| 2xx5-11-11 星期三 16:03:14 | \\win- 3\processor(1)% processor time | 0.35 |
| 2xxx5-11-11 星期三 16:03:14 | \\win- 3\processor(2)% processor time | 8.14 |
| 2xxx5-11-11 星期三 16:03:14 | \\win- 3\processor(3)% processor time | 8.14 |
| 2xx5-11-11 星期三 16:03:14 | \\win- 3\processor(_total)% processor time | 6.19 |
Timestamp CounterSamples
--------- --------------
2005-11-11 星期三 16:03:14 \\win- \processor(0)\% processor time :
8.13926699942963
\\win- 3\processor(1)\% processor time :
0.354459118025363
\\win- 3\processor(2)\% processor time :
8.13926699942963
\\win- 3\processor(3)\% processor time :
8.13926699942963
\\win- \processor(_total)\% processor time :
6.19307001135561
| 属性 (Property) | 值 (Value) |
|---|---|
| 时间戳 (Timestamp) | 2025-10-01 星期三 16:03:14 |
| 实例 0 CPU 时间 (Processor(0) % Processor Time) |
8.14% |
| 实例 1 CPU 时间 (Processor(1) % Processor Time) |
0.35% |
| 实例 2 CPU 时间 (Processor(2) % Processor Time) |
8.14% |
| 实例 3 CPU 时间 (Processor(3) % Processor Time) |
8.14% |
| 总 CPU 时间 (Processor(_Total) % Processor Time) |
6.19% |
信息解读与建议
-
核心负载不均衡:从数据看,实例0、2、3的负载相近(约8.14%),而实例1的负载极低(0.35%)。这可能意味着当前任务未能均匀分配到所有CPU核心。
-
监控准确性:有用户报告
Get-Counter的读数与其他工具(如任务管理器)可能存在差异。为了获得更稳定的平均值,您可以在命令中增加-MaxSamples和-SampleInterval参数,例如:Get-Counter -Counter "\Processor(*)\% Processor Time" -MaxSamples 3 -SampleInterval 2 -
命令探索:您可以使用
Get-Counter -ListSet *命令来探索系统上所有可用的性能计数器集合,从而监控更多系统指标,如内存、磁盘和网络。
希望这个表格和解读能帮助您更好地了解系统状态。

浙公网安备 33010602011771号