Windows 10命令行查看CPU温度:PowerShell脚本返回异常求助
嘿,我来帮你解决这个PowerShell温度脚本的问题——你遇到的0开尔文/零下273摄氏度的结果,本质是因为你的代码只获取了WMI对象,但完全没提取和返回实际的温度数据。
问题根源分析
你的原代码片段:
function Get-Temperature { $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" }
这里存在两个核心问题:
- 你只是把WMI查询结果赋值给了
$t变量,但函数没有任何返回语句,调用Get-Temperature时默认返回空值,后续转换自然会算出0K(空值转数字就是0)。 - 就算你返回了
$t,MSAcpi_ThermalZoneTemperature对象的温度数据存在CurrentTemperature属性中,你得主动提取这个值才能进行单位转换。
修复后的完整脚本
我给你调整成了能正确提取并转换温度的版本,同时换成了更现代的Get-CimInstance(微软已不推荐使用Get-WmiObject,它在PowerShell 5.1之后逐步被CIM cmdlets替代):
function Get-Temperature { # 获取ACPI热区温度的CIM实例 $thermalZones = Get-CimInstance -ClassName MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" foreach ($zone in $thermalZones) { # 提取原始温度值(单位:0.01开尔文) $rawTemp = $zone.CurrentTemperature if ($rawTemp -eq 0) { Write-Warning "当前热区未返回有效温度数据" continue } # 转换为常用单位并保留两位小数 $kelvin = [math]::Round($rawTemp / 100, 2) $celsius = [math]::Round($kelvin - 273.15, 2) $fahrenheit = [math]::Round(($celsius * 9/5) + 32, 2) # 返回结构化的温度对象,方便后续使用 [PSCustomObject]@{ ThermalZone = $zone.InstanceName Kelvin = $kelvin Celsius = $celsius Fahrenheit = $fahrenheit } } } # 调用函数查看结果 Get-Temperature
额外注意事项
- 权限问题:部分系统需要以管理员身份运行PowerShell才能访问WMI/CIM的ACPI温度数据,如果还是返回空,试试右键PowerShell选择「以管理员身份运行」。
- 硬件兼容性:不是所有主板/BIOS都支持通过
MSAcpi_ThermalZoneTemperature暴露CPU温度——如果这个类返回空,你可以试试查询另一个系统类:Get-CimInstance Win32_PerfFormattedData_Counters_ThermalZoneInformation | Select-Object Name, Temperature - 替代方案:如果WMI/CIM途径还是拿不到准确的CPU核心温度,你其实不用依赖第三方软件:Windows自带的任务管理器(性能标签页→CPU→右下角温度)、
powercfg /thermal命令都能直接查看系统热数据。
内容的提问来源于stack exchange,提问作者Virgilio




