【问题标题】:Get CPU temperature in CMD/POWER Shell在 CMD/POWERShell 中获取 CPU 温度
【发布时间】:2016-09-28 05:08:41
【问题描述】:

在我的计算机中,我正在尝试获取 CPU 温度。在 StackOverflow 上搜索我发现了这个:

C:\WINDOWS\system32>wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

但我收到此错误:

Node - ADMIN
ERROR:
Description = Not supported

【问题讨论】:

  • "不支持" - 这台机器上没有其他功能。 BIOS 根本不支持读取它。

标签: powershell cmd cpu temperature


【解决方案1】:

你可以使用这个代码:

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

【讨论】:

  • 这不是直接的 CPU 温度,而是 MB 上的某处:stackoverflow.com/a/17083409/1747983
  • 更新新版本:Get-CimInstance MSAcpi_ThermalZoneTemperature -Namespace "root/wmi"
【解决方案2】:

您可以通过 WMI 和Open Hardware Monitor 两种方式获取 CPU 温度。

打开硬件监视器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenHardwareMonitor.Hardware;
namespace Get_CPU_Temp5
{
   class Program
   {
       public class UpdateVisitor : IVisitor
       {
           public void VisitComputer(IComputer computer)
           {
               computer.Traverse(this);
           }
           public void VisitHardware(IHardware hardware)
           {
               hardware.Update();
               foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
           }
           public void VisitSensor(ISensor sensor) { }
           public void VisitParameter(IParameter parameter) { }
       }
       static void GetSystemInfo()
       {
           UpdateVisitor updateVisitor = new UpdateVisitor();
           Computer computer = new Computer();
           computer.Open();
           computer.CPUEnabled = true;
           computer.Accept(updateVisitor);
           for (int i = 0; i < computer.Hardware.Length; i++)
           {
               if (computer.Hardware[i].HardwareType == HardwareType.CPU)
               {
                   for (int j = 0; j < computer.Hardware[i].Sensors.Length; j++)
                   {
                       if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
                               Console.WriteLine(computer.Hardware[i].Sensors[j].Name + ":" + computer.Hardware[i].Sensors[j].Value.ToString() + "\r");
                   }
               }
           }
           computer.Close();
       }
       static void Main(string[] args)
       {
           while (true)
           {
               GetSystemInfo();
           }
       }
   }
}

WMI:

using System;
using System.Diagnostics;
using System.Management;
class Program
{
   static void Main(string[] args)
   {
       Double CPUtprt = 0;
       System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(@"root\WMI", "Select * From MSAcpi_ThermalZoneTemperature");
       foreach (System.Management.ManagementObject mo in mos.Get())
       {
           CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10;
          Console.WriteLine("CPU temp : " + CPUtprt.ToString() + " °C");
       }
   }
}

我在这里找到了一个不错的教程,我成功获取了 CPU 温度。

http://www.lattepanda.com/topic-f11t3004.html

【讨论】:

    【解决方案3】:

    您可以使用 Open Hardware Monitor,它是一个开源软件 (MPL v2)。 您可以在此处访问命令行版本:

    OpenHardwareMonitorReport.zip

    输出的示例部分:

    PS C:\Users\myuser\OpenHardwareMonitorReport> .\OpenHardwareMonitorReport.exe
    
    Open Hardware Monitor Report
    
    --------------------------------------------------------------------------------
    
    Version: 0.8.0.2
    
    --------------------------------------------------------------------------------
    
    Common Language Runtime: 4.0.30319.42000
    Operating System: Microsoft Windows NT 6.2.9200.0
    Process Type: 32-Bit
    
    --------------------------------------------------------------------------------
    
    Sensors
    
    |
    +- HP 00F52W (/mainboard)
    |
    +- Intel Core i7-3770 (/intelcpu/0)
    |  +- Bus Speed      :  99.7734  99.7734  99.7784 (/intelcpu/0/clock/0)
    |  +- CPU Core #1    :  3691.62  3691.62  3791.58 (/intelcpu/0/clock/1)
    |  +- CPU Core #2    :  3691.62  3691.62  3791.58 (/intelcpu/0/clock/2)
    |  +- CPU Core #3    :  3791.39  3791.39  3891.36 (/intelcpu/0/clock/3)
    |  +- CPU Core #4    :  3691.62  3691.62  3891.36 (/intelcpu/0/clock/4)
    |  +- CPU Core #1    :       42       42       43 (/intelcpu/0/temperature/0)
    |  +- CPU Core #2    :       43       37       43 (/intelcpu/0/temperature/1)
    |  +- CPU Core #3    :       42       35       42 (/intelcpu/0/temperature/2)
    |  +- CPU Core #4    :       45       41       45 (/intelcpu/0/temperature/3)
    |  +- CPU Package    :       45       43       45 (/intelcpu/0/temperature/4)
    

    【讨论】:

      【解决方案4】:

      管理员身份在命令提示符中运行以下命令:

      wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

      这会给你一些像这样的输出:

      CurrentTemperature 3000 3010

      但请确保您以 Administrator

      身份运行 cmd

      【讨论】:

      • 管理员或没有管理员没有区别。显然我的 Windows 不支持该查询。
      • 在我的电脑上 - CurrentTemperature 3000 3010 它是多少°C?
      【解决方案5】:

      在我的笔记本电脑上,以上所有结果都给了我错误的结果。只有这个以摄氏度显示 CPU 温度:

      $data = Get-WMIObject -Query "SELECT * FROM Win32_PerfFormattedData_Counters_ThermalZoneInformation" -Namespace "root/CIMV2"
      @($data)[0].HighPrecisionTemperature
      

      我猜,每个 CPU 版本可能有不同的位置/公式来获得正确的 CPU 温度。

      【讨论】:

        【解决方案6】:

        使用新传感器,或者使用我拥有的传感器和海拔。 它还显示临界温度和百分比(以摄氏度为单位) 它留下一个文件 Temperatures.txt 以便于调试,以及带有来自传感器的序列化对象的 xml

        function Get-Temperature {
            $TempFormat = "#"
            $TempFile = "temperature"
        
            $Command = 'Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" ' + " > $pwd\$TempFile.txt"
            $Command = 'Get-WmiObject MSAcpi_ThermalZoneTemperature -Namespace "root/wmi" ' + " | Export-Clixml $pwd\$TempFile.xml"
        
            $p = Start-Process -Verb runas -FilePath "powershell" -ArgumentList $command -WorkingDirectory $pwd -PassThru
            $p.WaitForExit()
        
            $t = Import-Clixml pippo.xml
        
            $returntemp = @()
        
            foreach ($Sensor in $t)
            {
            $Active = if($sensor.Active){"On "}else{"Off"}
            $temp = $Sensor.CurrentTemperature
            $Critical = $Sensor.CriticalTripPoint
        
            $currentTempKelvin = $temp / 10
            $currentTempCelsius = $currentTempKelvin - 273.15
            $currentTempFahrenheit = (9/5) * $currentTempCelsius + 32
        
            $StrKelvin = $currentTempKelvin.ToString($TempFormat).PadLeft(3, " ")
            $StrCelsius = $currentTempCelsius.ToString($TempFormat).PadLeft(3, " ")
            $StrFahrenheit = $currentTempFahrenheit.ToString($TempFormat).PadLeft(3, " ")
        
            $CriticalKelvin = $Critical / 10
            $CriticalCelsius = $CriticalKelvin - 273.15
            $CriticalFahrenheit = (9/5) * $CriticalCelsius + 32
        
            $StrCritKelvin = $CriticalKelvin.ToString($TempFormat).PadRight(3, " ")
            $StrCritCelsius = $CriticalCelsius.ToString($TempFormat).PadRight(3, " ")
            $StrCritFahrenheit = $CriticalFahrenheit.ToString($TempFormat).PadRight(3, " ")
        
            $PerCrit = ($currentTempCelsius/$CriticalCelsius * 100)
            $StrPerCrit = $PerCrit.ToString($TempFormat).PadLeft(3, " ")
        
            $returntemp += "$Active $StrPerCrit% $StrCelsius/$StrCritCelsius C : $StrFahrenheit/$StrCritFahrenheit  F : $StrKelvin/$StrCritKelvin K - " + $Sensor.InstanceName 
            }
            return $returntemp
        }
        
        Get-Temperature
        

        【讨论】:

        • Import-Clixml pippo.xml pippo.xml 在哪里创建?
        猜你喜欢
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2022-08-05
        • 1970-01-01
        相关资源
        最近更新 更多