有没有办法使用PS获取CPU功耗? Open Hardware Monitor显然有办法返回该数字,但我无法在 OHM's source 中找到相关代码.
最佳答案
我在存储库中搜索了“温度”并找到了这个示例:https://github.com/openhardwaremonitor/openhardwaremonitor/blob/da432ef07cf125c019afd3a27f447da428404611/Hardware/LPC/W836XX.cs
它似乎需要特定于设备的类,例如 OpenHardwareMonitor.Hardware.LPC.W836XX
适用于 HP 和 Fujitsu 系统或 OpenHardwareMonitor.Hardware.LPC.F718XX
对于F75375
例如,许多显卡使用的芯片。这些类知道可以访问数据的 IO 端口和内存地址,因此 Windows(或 PowerShell)中没有标准 API 供所有设备放置其硬件统计信息:因此这种情况非常相似到 20 世纪 90 年代初 DirectSound 和 OpenAL 之前的 PC 声卡。
读取原始数据是通过此文件 ( 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/