Start-MonitorTemperature.ps1
function Start-MonitorTemperature { <# .SYNOPSIS Continuously monitors all available temperature sensors. Requires Administrator privileges. Press CTRL+C to stop monitoring. .DESCRIPTION Uses the OpenHardwareMonitor library to continuously read all temperature sensors. Command refreshes values per second and calculates average temperature across all sensors. .EXAMPLE Start-MonitorTemperature Starts the temperature sensor monitoring. Press CTRL+C to stop monitoring. .EXAMPLE Start-MonitorTemperature -Interval 10 | Format-Table Starts the temperature sensor monitoring and refreshes every 10 seconds. Results are displayed as a table. Press CTRL+C to stop monitoring. .EXAMPLE Start-MonitorTemperature -Interval 5 | Out-GridView -Title 'Temperature Monitor' Starts the temperature sensor monitoring and refreshes every 5 seconds. Results are displayed in a separate GridView window. Press CTRL+C to stop monitoring. #> [CmdletBinding()] param ( # Monitoring interval in seconds. Default is 1 second. [ValidateRange(1,100000)] [int] $Interval=1 ) $HardwareMonitor = [OpenHardwareMonitor.Hardware.Computer]::new() $HardwareMonitor.CPUEnabled = $true $HardwareMonitor.HDDEnabled = $true $HardwareMonitor.Open() Write-Warning "HardwareMonitor opened." try { do { $HardwareMonitor.Hardware.Update() $result = [Ordered]@{ Time = Get-Date -Format HH:mm:ss } $numberSensors = 0 $sumTemperature = 0 $HardwareMonitor.Hardware.Sensors | Where-Object SensorType -eq Temperature | ForEach-Object { $numberSensors++ $sumTemperature+=$_.Value -as [int] $name = '{0} {1}' -f $_.Hardware.HardwareType, $_.Name.Replace($_.Hardware.HardwareType.ToString(),'').Trim() $result[$name] = $_.Value -as [int] } $result['Average'] = ($sumTemperature/$numberSensors) -as [int] [PSCustomObject]$result Start-Sleep -Seconds $Interval } while ($true) } finally { $HardwareMonitor.Close() Write-Warning "HardwareMonitor closed." } } |