I’ve got a hyper-v server where the CPU was overheating and, therefore, become unresponsive. I’ve since added fans to prevent this, but just in case it occurs again, I wanted to write a script that ran every few minutes, via a scheduled job, that checked the status of the LED, or some status on the motherboard, etc… to see if the CPU was overheating. If it was, then I would have the script do the following:
- Send me an e-mail letting me know the CPU was overheating.
- Shut down all the hyper-v VMs
- Shut down the hyper-v server itself.
The part I’m needing help on, is what do I need to check that allows me to detect the overheat? I’ve checked Win32_BaseBoard, Win32_MotherBoardDevice, as well as under the ROOT\Hardware class, but not seen anything that indicates the overheat occurred. I’m guessing that’s because the server has been shut down and restarted since the last overheat, so that information probably got wiped out. Any thoughts would be appreciated.
You’ll have to check with your vendor. Nearly none of them populate the core CIM or Win32 classes, nor do they surface the information directly to Windows. Usually, if they surface that information at all, it’s through a device driver and a dedicated WMI namespace.
Frankly, most vendors don’t surface that information in a way that PowerShell can get to it easily.
Thanks Don. I was afraid of that.
That’s an awesome find. Unfortunately, my hyper-v server’s motherboard/cpu doesn’t support it…but my Surface computer does…lol. It looks like when a computer, like my hyper-v server, doesn’t support it, you get the following error:
Get-WmiObject: Not supported
Thanks for looking into it for me.
This may also help although not a powershell solution. If you spin up a ubuntu server on your VM you may be able to use this
Thanks, Simon. I went into the manual for my motherboard and found a URL to their own monitoring software. I’m going to check it out.
np anytime. Your link looks promising