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
}
}
