如何通过PowerShell获取虚拟服务器的温度
虚拟机环境下PowerShell获取服务器温度的解决方案
你之前使用的
Win32_PerfFormattedData_Counters_ThermalZoneInformationWMI类仅能读取当前操作系统可见的硬件温度传感器数据。默认情况下虚拟机管理程序不会将物理宿主机的温度传感器透传给客户机操作系统,因此该命令在虚拟机中返回空值或报错属于正常情况。
方案1:从虚拟化宿主机层面获取温度(无需改动虚拟机配置)
根据你使用的虚拟化平台,在宿主机或者安装了对应平台管理组件的设备上执行PowerShell命令即可获取:
- 如果你使用Hyper-V:
- 先确认目标虚拟机已开启集成服务:
Get-VMIntegrationService -VMName <替换为你的虚拟机名称> | Where-Object {$_.Name -eq "Heartbeat"} - 直接在宿主机执行获取温度的命令:
Get-CimInstance Win32_PerfFormattedData_Counters_ThermalZoneInformation - 如需将温度数据同步到客户机,可通过共享文件夹、自定义集成服务参数的方式传递
- 先确认目标虚拟机已开启集成服务:
- 如果你使用VMware vSphere:
- 先安装PowerCLI组件,执行命令获取宿主机温度:
Get-VMHost <替换为宿主机名称> | Select-Object -ExpandProperty Hardware | Select-Object Temperature - 如需同步到客户机,可通过VMware Tools自定义变量传递数值
- 先安装PowerCLI组件,执行命令获取宿主机温度:
方案2:在客户机操作系统内部直接读取温度
需要先开启虚拟化平台的传感器透传功能,操作完成后即可在虚拟机内正常使用原本的WMI命令读取温度:
- Hyper-V环境:开启离散设备分配,将物理温度传感器硬件直通给目标虚拟机,要求宿主机CPU支持VT-d/AMD-Vi,且该传感器未被其他设备/虚拟机占用
- VMware环境:编辑目标虚拟机的.vmx配置文件,添加配置项
devices.hotplug.allowSensor = "TRUE"后重启虚拟机即可,仅部分硬件平台支持该操作
公有云虚拟机特殊说明
如果你使用的是阿里云、AWS、Azure等公有云服务商提供的虚拟机,绝大多数场景下不支持硬件传感器透传,无法直接在客户机内部通过WMI类读取温度,只能通过对应云平台的监控API获取宿主机相关温度监控数据。
内容的提问来源于stack exchange,提问作者MG78
相关产品推荐
相关产品推荐

