Force automatic restart even with users logged in after installation of updates on Windows 8.1 Professional

7,261

Solution 1

Updated version of Drifter104s answer.

This will do what you want with a Powershell script, as it still seems very hard (impossible?) to get this configured correctly through group policy / registry.

  1. Install the Test-PendingReboot Powershell module:

    Install-Module -Name PendingReboot

  2. Then create a scheduled task to run the following powershell commands

    $RebootStatus = $null
    $RebootStatus = Test-PendingReboot | Select IsRebootPending | Where-Object {$_.IsRebootPending -like "True"}
    if ($RebootStatus -ne $null) {shutdown -r -f -t 60}
    

The changes I made compared to the previous answer are:

  • The Powershell script provided previously is no longer being developed and has been replaced with the one I linked.
  • Installing the script as a PowerShell module should automatically make it available for all users, meaning that you don't need to make it load automatically (the link to those instructions is now broken any way)
  • The results from the new PS Module are slightly different and so the query to find out 'RebootStatus' needed changing.
  • I also initialised 'RebootStatus' to $null to avoid false positives in case the second line of the script is broken, commented out, wrapped in a conditional etc.

Solution 2

This will do what you want with a powershell script.

download the powershell function/module from here https://gallery.technet.microsoft.com/scriptcenter/Get-PendingReboot-Query-bdb79542

Then edit the powershell profile for all users so that function gets loaded automatically. This link explains how to do that http://www.gsx.com/blog/bid/81096/Enhance-your-PowerShell-experience-by-automatically-loading-scripts

Then create a scheduled task to run the following powershell commands

$RebootStatus = "NotSet"

$RebootStatus = Get-PendingReboot | Select WindowsUpdate | Where-Object {$_.WindowsUpdate -like "True"}

if ($RebootStatus -ne $null) {shutdown -r -f -t 60}

Basically if the return value is false it sets $RebootStatus to empty, otherwise it populates it with a value. It checks that and reboots if $RebootStatus has any value other then $null.

Sorry if this goes over things you already know.

Share:
7,261

Related videos on Youtube

Sven Koschnicke
Author by

Sven Koschnicke

Updated on September 18, 2022

Comments

  • Sven Koschnicke
    Sven Koschnicke almost 2 years

    I want a Windows 8.1 Professional installation which is always running and accessed by users via RDP to install updates automatically and also reboot automatically if the updates require it, but this should only happen saturday night (at any other time the system needs to be running and available for users).

    I changed the following registry settings:

    In HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU:

    • AUOptions = 4 (Automatically download and scheduled installation)
    • ScheduledInstallDay = 7 (saturday)
    • ScheduledInstallTime = 0 (0 o'clock)
    • NoAutoRebootWithLoggedOnUsers = 0 (also reboot with logged in users)
    • AlwaysAutoRebootAtScheduledTime = 1 (force restart)

    Unfortunately, this does not always work. It worked once when I set the ScheduledInstallDay to thursday because I read in the documentation for AlwaysAutoRebootAtScheduledTime:

    When this registry value is set to 1, you are still notified of the upcoming automatic restart on the sign-in screen. However, at the end of the three-day period, the 15-minute counter begins even if the computer is locked. The restart also occurs even if the computer is locked.

    Source: How to force automatic restarts after important updates in Windows 8 and Windows Server 2012

    So I thought if I want the system to restart on saturday, I have to set the scheduled day three days before that, because the restart is delayed 3 days. But the system restarted on thursday. Therefor I set the scheduled day to saturday again, but now the restart did not happen at all (I always have to wait for the next update which requires a restart to test the new settings).

    How do I have to configure the system so that it always reboots on saturday night if an installed update requires it, even when a user is logged in at that time?

    Update: As there is still no answer, I'm starting to believe that I'm on a completely wrong path here. I would also be happy for pointers how such a thing should be done, e.g. how do you keep a remotely accessed Windows machine always up to date when there is a fixed time window for updates?

    • Sven Koschnicke
      Sven Koschnicke almost 9 years
      If you downvote please explain what I can improve on this question.
    • Drifter104
      Drifter104 almost 9 years
      As you can see the windows update settings don't always run to the same logic you might expect. Why not just reboot the machine every Saturday?
    • Sven Koschnicke
      Sven Koschnicke almost 9 years
      Periodically rebooting would mean that users need to reconnect and reopen their applications, even when there was no need for a reboot (I think there was no update requiring a reboot for the last month or so). This is a solution, but not an optimal one. I would rather try to write a script which checks if the reboot is needed, but I thought there is a build in mechanism, especially as the settings suggest that there is one.
  • Drifter104
    Drifter104 almost 9 years
    I suggested this as a script because as you have already found out, the update settings simply don't work as expected
  • Sven Koschnicke
    Sven Koschnicke almost 9 years
    Looks good! I will try that. Why are you setting $RebootStatus to "NotSet" initially?
  • Drifter104
    Drifter104 almost 9 years
    @SvenKoschnicke habbit (bad habbit?) of setting and declaring them. It could be set to anything I suppose. I can get by with scripting but I've no idea on some of the best ways of doing things
  • Sven Koschnicke
    Sven Koschnicke almost 9 years
    All installed. Unfortunately, I can't know if this works until the next windows update which needs a restart. So I will not accept the answer for now, but you get the bounty because it would expire too early.
  • Drifter104
    Drifter104 almost 9 years
    Thank you, let me know if it doesn't work and I'll make changes
  • Sven Koschnicke
    Sven Koschnicke over 4 years
    Thank you for taking the time to post an updated version! Could you explain what you improved? I see you are using a differnt script for testing the pending reboot. Is that working better? Are there other improvements?
  • steeveeet
    steeveeet over 4 years
    Comments added above :)
  • Sven Koschnicke
    Sven Koschnicke over 4 years
    Nice! Thank you!