Running a little low on content this last few months, plus I’ve been busy with other work stuff.
I had the requirement to create a PowerShell script that would get the uptime of a server and then decide whether or not the server needed rebooting.
I also wanted the script to randomize the reboot of the servers, that way if there are multiple servers that need rebooting at once, they don’t cause a power spike or resource issues on the hosts. I did this by creating a random number between 1 and 5 and then if the number equals 5, the server is rebooted. If not then the server isn’t rebooted.
This is the script that I ended up with and what is currently being tested:
$loglocation = "C:\scripts\reboot\log" $dateforfile = Get-Date #GETS UPTIME IN DAYS $lastbootuptime = Get-WmiObject win32_operatingsystem $uptime = (Get-Date) - ($lastbootuptime.converttodatetime($lastbootuptime.lastbootuptime)) $uptimeindays = $uptime.days #GETS RANDOM NUMBER $randomnumber = Get-Random -Minimum 1 -Maximum 6 if ($uptimeindays -ge "14"){ Add-Content -Path "$loglocation\$env:COMPUTERNAME.txt" -Value @" ===================================================================================== Server restarted at: $dateforfile This was an immediate shutdown as the server had been up for $uptimeindays days "@ Restart-Computer -Force }elseif ($uptimeindays -lt "14" -and $uptimeindays -ge "7"){ if ($randomnumber -eq "5"){ Add-Content -Path "$loglocation\$env:COMPUTERNAME.txt" -Value @" ===================================================================================== Server restarted at : $dateforfile This was a random restart as uptime was only $uptimeindays days "@ Restart-Computer -Force }else{ Add-Content -Path "$loglocation\$env:COMPUTERNAME.txt" -Value @" ===================================================================================== Server NOT restarted $dateforfile This was not randomly restarted. Uptime is currently $uptimeindays days. Random number was $randomnumber "@ } }else{ Add-Content -Path "loglocation\$env:COMPUTERNAME.txt" -Value @" ===================================================================================== No restart required $dateforfile No restart required since uptime is only $uptimeindays days "@ }
The first time I created this script and set it up as a scheduled task, nothing happened. Turns out that I needed the -Force parameter in order for the server to be rebooted.
This will later be used in a group policy without the log creating as that is only necessary in the testing stage.
Enjoy!