The most reliable way I had for a long time, was using a scheduled task. But Powershell for this changes from Windows version to Windows version. Here’s a new method, it uses the time specification in the ‘shutdown’ command, to reboot the machine tomorrow at 3AM:
$tomorrow3AM = (Get-Date).AddHours(24) $tomorrow3AM = $tomorrow3AM.AddHours( ($tomorrow3AM.Hour * -1) + 3 ) $tomorrow3AM = $tomorrow3AM.AddMinutes( $tomorrow3AM.Minute * -1 ) $tomorrow3AM = $tomorrow3AM.AddSeconds( $tomorrow3AM.Second * -1 ) $tomorrow3AM = $tomorrow3AM.AddMilliseconds( $tomorrow3AM.Millisecond * -1 ) $SecondsFromNow = ($tomorrow3AM - (Get-Date)).TotalSeconds shutdown -f -r -t ([int] $SecondsFromNow)