有没有办法使用PS获得CPU功耗? Open Hardware Monitor显然可以返回该数字,但是我无法在OHM's source中找到相关代码。
最佳答案
我在存储库中搜索了“温度”,并找到了以下示例: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的声音非常相似-卡是在1990年代初的DirectSound和OpenAL之前。
读取原始数据由此文件中的代码(https://github.com/openhardwaremonitor/openhardwaremonitor/blob/da432ef07cf125c019afd3a27f447da428404611/Hardware/Ring0.cs)完成,该文件似乎将硬件驱动程序加载到操作系统中,然后使用IOCtrl(DeviceIOControl
)与之交换消息。
驱动程序WinRing0.sys
的源代码在同一存储库中,位于以下位置:https://github.com/openhardwaremonitor/openhardwaremonitor/tree/master/External/WinRing0
至于您的实际问题:如果您使用PowerShell的功能直接与.NET对象进行交互,则可以通过PowerShell获得所需的数据-您只需要直接在PowerShell中调用OpenHardwareMonitor的类方法,但是您需要以提升的权限运行PowerShell因此,OpenHardwareMonitor代码具有特权,因此可以安装Ring0
驱动程序,使其能够读取每个芯片的值。
一个更好的主意可能是编写一个Windows服务,该服务通过一些共享管道公开此数据,非管理员PowerShell实例可以从该共享管道中读取数据。
对于CPU功耗,在Hardware/CPU
下,然后为系统中的CPU选择正确的类。对于IntelCPU
,请查看MSR_RAPL_POWER_UNIT
的使用。
关于windows - 如何在PowerShell中获得CPU功耗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49202065/