2016-09-28 48 views
1

私のコンピュータでは、CPU温度を取得しようとしています。CMD/POWERシェルでCPU温度を取得

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

しかし、私はこのエラーを取得する:StackOverflowの上で検索、私はこれを見つけた

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 
関連する問題