You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10命令行查看CPU温度:PowerShell脚本返回异常求助

嘿,我来帮你解决这个PowerShell温度脚本的问题——你遇到的0开尔文/零下273摄氏度的结果,本质是因为你的代码只获取了WMI对象,但完全没提取和返回实际的温度数据

问题根源分析

你的原代码片段:

function Get-Temperature { 
    $t = Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" 
}

这里存在两个核心问题:

  1. 你只是把WMI查询结果赋值给了$t变量,但函数没有任何返回语句,调用Get-Temperature时默认返回空值,后续转换自然会算出0K(空值转数字就是0)。
  2. 就算你返回了$tMSAcpi_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

火山引擎 最新活动