如何在PowerShell中获得CPU功耗?

时间:2018-03-09 20:59:58

标签: windows powershell

有没有办法使用PS获得CPU功耗? Open Hardware Monitor显然有办法返回该号码,但我无法在OHM's source中找到相关代码。

1 个答案:

答案 0 :(得分:4)

我在回购中寻找温度"并找到了这个例子:https://github.com/openhardwaremonitor/openhardwaremonitor/blob/da432ef07cf125c019afd3a27f447da428404611/Hardware/LPC/W836XX.cs

似乎需要特定于设备的类,例如HP和Fujitsu系统的OpenHardwareMonitor.Hardware.LPC.W836XX或许多图形卡使用的OpenHardwareMonitor.Hardware.LPC.F718XX芯片F75375。这些类知道可以访问数据的IO端口和内存地址,因此Windows(或PowerShell)中没有标准API,所有设备都将其硬件统计信息置于:所以这种情况非常相似关于PC声卡在20世纪90年代早期的DirectSound和OpenAL之前的情况。

读取原始数据是通过此文件中的代码(https://github.com/openhardwaremonitor/openhardwaremonitor/blob/da432ef07cf125c019afd3a27f447da428404611/Hardware/Ring0.cs)完成的,该文件似乎将硬件驱动程序加载到操作系统中,然后使用IOCtrl(DeviceIOControl)与其交换消息。 / p>

驱动程序WinRing0.sys的源代码位于同一个仓库中,位于以下位置:https://github.com/openhardwaremonitor/openhardwaremonitor/tree/master/External/WinRing0

至于您的实际问题:如果您使用PowerShell直接与.NET对象交互的能力,您可以通过PowerShell获取所需的数据 - 您只需直接从内部调用OpenHardwareMonitor的类方法PowerShell,但您需要使用提升的权限运行PowerShell,以便OpenHardwareMonitor代码可以安装Ring0驱动程序,使其能够读取每个芯片的值。

更好的想法可能是编写一个Windows服务,通过一些非管理员PowerShell实例可以读取的共享管道来公开这些数据。

对于CPU功耗,Hardware/CPU下的CPU功耗,然后为系统中的CPU选择正确的类。对于IntelCPU,请查看MSR_RAPL_POWER_UNIT

的使用情况