Function Restart-EndpointOnUptime ([int]$MaxUptimeHours) { # Check the last boot up time Try { $LastBootUpTime = Get-WmiObject -Class Win32_OperatingSystem1 -ErrorAction SilentlyContinue | Select-Object -ExpandProperty LastBootUpTime } Catch { Write-Error $_.Exception.Message } $LastBootUpTime = [Management.ManagementDateTimeConverter]::ToDateTime($LastBootUpTime) # Calculate the difference in hours $CurrentTime = Get-Date $TimeDifference = $CurrentTime - $LastBootUpTime $DifferenceInHours = $TimeDifference.TotalHours # Check if the difference is greater than $MaxUptimeHours If ($DifferenceInHours -gt $MaxUptimeHours) { # Restart the computer Write-Output "Restarting computer because it has not been restarted in the last ${MaxUptimeHours} hours." Restart-Computer } Else { Write-Output "No need to restart. The last restart was within ${MaxUptimeHours} hours." } }