2016-09-28 510 views
1

在我的計算機中,我試圖獲取CPU溫度。搜索在計算器上,我發現這一點:獲取CMD/POWER Shell中的CPU溫度

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

但我得到這個錯誤:

Node - ADMIN 
ERROR: 
Description = Not supported 
+1

「不支持」與序列化對象的XML - 沒有別的這臺機器上會工作。 BIOS根本不支持讀取它。 –

回答

2

您可以使用此代碼:

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 
1

你可以在這兩個WMI的CPU溫度和Openhardwaremonitor方式。

打開Hardwaremonitor:

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

0

有了新的傳感器,或者與我有什麼與提升。 這也表明臨界溫度和百分比(攝氏) 它的葉子便於調試文件Temperatures.txt,並從傳感器

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