The following script will reboot a computer if it has an up time greater than 5 days and does not currently have a user logged on.
Function Get-TimeStamp { Return "[{0:MM/dd/yy} {0:HH:mm:ss}]" -f (Get-Date) } $LastBootUpTime = Get-WmiObject win32_operatingsystem $Uptime = ((Get-Date) - ($LastBootUpTime.ConvertToDateTime($LastBootUpTime.LastBootUpTime))).Days If($Uptime -gt 5) { $Explorer = Get-WmiObject Win32_Process -Filter "Name = 'Explorer.exe'" If($Explorer -eq $null) { Write-Output "$(Get-TimeStamp) - Uptime = $Uptime Days" >> C:\TEMP\ForcedReboot.log Write-Output "$(Get-TimeStamp) - Reboot Initiated" >> C:\TEMP\ForcedReboot.log Restart-Computer } Else { Write-Output "$(Get-TimeStamp) - Uptime = $Uptime Days" >> C:\TEMP\ForcedReboot.log Write-Output "$(Get-TimeStamp) - User is currently logged on. Reboot has been postponed" >> C:\TEMP\ForcedReboot.log } }