Windows系统下获取主板各区域温度的命令

Windows下的WMI里提供了MSAcpi_ThermalZoneTemperature接口的,调用一下即可。
WMI即Windows Management Instrumentation,是一个Windows管理工具/模块,可以从这里获得大部分你需要的系统信息。

 

1. 以管理员身份启动powershell,输入以下命令:

function Get-Temperature { 
    $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" 
    $returntemp = @() 

    foreach ($temp in $t.CurrentTemperature) 
    { 
    $currentTempKelvin = $temp/10 
    $currentTempCelsius = $currentTempKelvin - 273.15 

    $currentTempFahrenheit = (9/5) * $currentTempCelsius + 32 

    $returntemp += $currentTempCelsius.ToString() + " C : " + $currentTempFahrenheit.ToString() + " F : " + $currentTempKelvin + "K" 
    } 
    return $returntemp 
} 

Get-Temperature

 结果如下(因为我的电脑主板有8个温区,所以显示了8个温度):

 

2. 这样堆积显示的比较乱,如果想单独看主板某个区域的温度,可先通过如下命令获取主板区域各接口的 InstanceName 信息:

Get-CimInstance -Namespace root/WMI -ClassName MSAcpi_ThermalZoneTemperature

 划红线处这就是主板各区域接口的 InstanceName (CPUZ_0就代表CPU Zone): 

 再通过如下代码获取该区域温度(记得替换对应的InstanceName):

"CPU: $(((Get-CimInstance -Namespace root/WMI -ClassName MSAcpi_ThermalZoneTemperature | where InstanceName -eq "ACPI\ThermalZone\CPUZ_0").CurrentTemperature - 2731.5) / 10) C"

结果如下(CPU区域的CPUZ_0当前温度为75.05℃) :

 

 

不过上述方法都只能获取主板各区域的温度,无法获得确切的CPU温度。
主要是因为CPU温度等信息在MSR寄存器或PCI配置空间中,而读取MSR的两条汇编指令:WRMSR 和RDMSR都是特权指令,普通应用层面无法使用该指令。不嫌麻烦的话,可以写个适配当前电脑主板硬件的底层驱动,来获取电脑的CPU温度信息......
其实这都是Windows的历史遗留问题,Windows设计之初就没想着像Linux一样给CPU温度留API调用接口.....
所以现在只能凑合着看个主板温区了,除非有精力像鲁大师那种去写适配硬件的底层驱动......

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值