With this variant, the servers from a list or an array will be restarted sequentially. If a server is not reachable or has problems with the Windows-Remoting-Service, this can lead to long runtimes. It gives you a nice overview where the reboot job worked or not.
With the parameter “-force” the servers will be rebooted even if there is still an active user session.
#13.11.2018 Restart a list/array of Servers through Windows Remoting $server = @( "Hostname-Server1" "Hostname-Server2" "Hostname-Server3" ) foreach ($server in $server){ try{ Restart-Computer -ComputerName $Server -force write-host "Reboot OK $server" -ForegroundColor Green }catch{ write-host "Reboot NOT OK $server" -ForegroundColor yellow } }
This is the parallel way to reboote servers from a list/array as a job using the “Invoke” function.
#13.11.2018 Restart a Liste/Array of Servers through Windows Remoting $server = @( "Hostname-Server1" "Hostname-Server2" "Hostname-Server3" ) foreach ($server in $server){ Invoke-Command -ComputerName $Server -ScriptBlock {shutdown -r -f -t 1} -AsJob }
With this function you can check if the servers have been restarted. You can also Check the last boot time.
#13.11.2018 Restart a Liste/Array of Servers through Windows Remoting $array = @() $server = @( "HostnameServer-1" "HostnameServer-2" "HostnameServer-3" ) foreach ($server in $server){ IF($s= New-CimSession -ComputerName $server -ErrorAction SilentlyContinue){ $array += (Get-CimInstance -ClassName win32_operatingsystem -CimSession $s ) #| select csname, lastbootuptime }Else{ $myObject = [PSCustomObject]@{ PSComputerName = $server csname = $server lastbootuptime = 'no data retrieved' } $array += $myObject } } Function Checkreboottime{ Param( [Parameter(Mandatory=$true)] [int]$time ) $TimeNow = Get-Date $array | % { IF(!($_.lastbootuptime -eq "no data retrieved")){ IF ([dateTime]$_.lastbootuptime.AddMinutes($time) -ge $TimeNow){ write-host $_.csname $_.lastbootuptime -ForegroundColor Green }Else{ write-host $_.csname $_.lastbootuptime -ForegroundColor yellow } }Else{ write-host $_.csname $_.lastbootuptime -ForegroundColor Cyan } } }
After calling the script, the function “Checkreboottime” can be used to check which servers have been restarted within a certain time.
Example: Checkreboottime -time 1000
The value 1000 indicates the minutes.
Yellow = Computer has not been restarted for more than 1000 minutes (since the time the script was executed)
Blue= No values could be determined
Green= computer restarted within 1000 minutes (since the script was executed)