Windows 10 Sleeps Before Set Time

System unattended sleep timeout

There is a hidden setting in the Power Options control panel called System unattended sleep timeout. By default it is set to two minutes and is not visible in the control panel. As far as I know, a registry tweak is required to make it visible.

The tweak involves changing the value of the "Attributes" key from 1 to 2 in the following location:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0]

Changing the value back to 1 re-hides the power option.

After making the above registry tweak open the Power Options control panel and there should now be a System unattended sleep timeout setting:

enter image description here

A reboot may be a good idea after.

You can read more about it here (and also download a .reg patch file if you want): http://www.sevenforums.com/tutorials/246364-power-options-add-system-unattended-sleep-timeout.html

Console lock display off timeout

There is also a somewhat related setting Console lock display off timeout which also requires a registry tweak to enable. I did not find this tweak necessary to fix my problem but perhaps you may. The tweak again involves changing the value of the "Attributes" key from 1 to 2, this time in the following location:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\7516b95f-f776-4464-8c53-06167f40cc99\8EC4B3A5-6868-48c2-BE75-4F3044BE88A7

And you can read more about it here: http://www.eightforums.com/tutorials/8267-power-options-add-console-lock-display-off-timeout.html


For further solution thoroughness in case all other solutions provided do not work to keep the Windows machine from going into a power saving or sleep mode, I'll provide a workaround solution that has worked for me when no other settings could be determined to resolve it otherwise.


Prevent Windows from Sleeping

Note: You can still set any other power saving prevention settings I don't mention if you want.

Creating Script Directory

  1. Create a C:\Scripts and C:\Scripts\Temp folder change the ScriptDir variable value to be something different if you wish and use the below command line logic to do this for you

    • Copy and paste this into command line to create the folder this way

      SET ScriptDir=C:\Scripts
      IF NOT EXIST "%ScriptDir%" MD "%ScriptDir%"
      
    • The batch script below needs to be copied into the root of the C:\Scripts folder


Creating Batch Script

  1. This is the batch script you'll create and/or copy to the script directory you decided to use so you can automate the script execution with Task Scheduler.

    • Essentially this script uses sendkeys to emulate the pressing of the spacebar 8 times but I put the logic in a FOR /L to lessen the script logic needed.

    • @ECHO ON
      
      IF NOT EXIST "%~dp0Temp" MD "%~dp0Temp"
      SET TempVBSFile=%~dp0Temp\~tmpSendKeysTemp.vbs
      IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"
      
      FOR /L %%A IN (1,1,9) DO (
        IF %%A==1 ECHO Set WshShell = WScript.CreateObject^("WScript.Shell"^)>>"%TempVBSFile%"
        IF NOT %%A==9 ECHO Wscript.Sleep 500 >>"%TempVBSFile%" & ECHO WshShell.SendKeys " ">>"%TempVBSFile%"
      )
      EXIT
      
    • Schedule a task with Task Scheduler using the settings as specified in the Scheduling Batch Script section


Scheduling Batch Script

Note: Open Task Scheduler or type in Taskschd.msc from Run and press Enter.

  1. From the General tab you will want to be sure the Run whether user is logged on or not is checked, Run with the highest privileges is checked, and that you also run the task with a credential that has local administrator privileges is you can.

    • enter image description here
  2. From the Triggers tab, define a New trigger and be sure to set options:

    • Begin the task: with a value of On a schedule
    • Start: with a time value of 12:00:00 AM
    • Settings: with the Daily value checked
    • Recur every: with a 1 day value
    • Repeat task every: with a 10 minutes value
    • For a duration of: with an Indefinitely value
    • The Enabled option should be checked

    • enter image description here

  3. From the Actions tab, define a New action and be sure to set options:

    • Action: with a value of Start a program
    • Program/script: with a value of full path to the batch script i.e. C:\Scripts\WakeUpWindows.cmd
    • Start in (optional): with the value of the script directory i.e. C:\Scripts

    • enter image description here

  4. From the Conditions tab be sure to set and/or check to enable options:

    • Start the task only if the computer is idle for: should be checked and have a value of 10 minutes

      • Only execute the script if the computer has been idle for 10 minutes. If the computer has not been idle for 10 minutes then likely someone has used it and the process shouldn't need to run yet.
    • Wait for idle for: with a value of 5 minutes

      • When the idle for 10 minutes condition is false this tells it keep checking for up to an additional 5 minutes and still execute the script if the 10 minute idle condition becomes true within that 5 minute window.
    • The Stop if the computer ceases to be idle option should be checked

      • If the Stop if the computer ceases to be idle condition is selected for a task and the task is running while the computer is in an idle state, then the task will stop running when the computer ceases to be idle.

        source

    • The Wake the computer to run this task option should be checked

    • enter image description here

    A computer is considered to be in an idle state when a screen saver is running. If a screen saver is not running, then the computer is considered to be in an idle state if there is 0% CPU usage and 0% disk input or output for 90% of the past fifteen minutes and if there is no keyboard or mouse input during this period of time. Once the Task Scheduler service detects that the computer is in an idle state, the service only waits for user input to mark the end of the idle state.

    source


Additional Power Saving Settings

  1. From an elevated command prompt run POWERCFG -H OFF to disable hibernation just in case it’s not already disabled.

  2. Copy control /name Microsoft.PowerOptions into Run and then press Enter.

    enter image description here

  3. Click on Change plan settings for whichever Preferred plan is checked to open the Edit Plan Settings screen.

    enter image description here

  4. Be sure the Put computer to sleep value is set to Never, and then click on the Change advanced power settings option

    enter image description here

  5. From the Advanced settings find and expand Hard disk, and then set the Turn off hard disk after Setting (minutes) to a value of Never

    Note: Be sure to Apply and Save Changes where applicable

    enter image description here

  6. Open Device Manager or type in devmgmt.msc from Run and press Enter.

  7. From Device Manager expand Network adapters, right click on the main NIC (or all if you wish one-by-one) and select Properties. From the Power Management tab, uncheck the option Allow the computer to turn off the device to save power.

enter image description here


Further Resources

  • Scheduled Task Problems
  • FOR /L
  • SendKeys
  • Task Conditions
  • Powercfg