windows - Scheduled tasks don't execute when initiated sleep from command line

07
2013-09
  • user643011

    I have the problem that scheduled tasks will only cause the pc to weak up from sleep, if the PC has been put to sleep with the GUI manually.

    However if I use the command line to suspend the computer the computer will not wake up and the scheduled task will not execute.

    I already tried all of the below commands:

    1. %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState

    2. %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

    3. powercfg -hibernate off and %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0

    None of those commands works like the GUI does! I also tried forcing S1 instead of S3 sleep in the BIOS. This did not help either. OS is Windows XP. This is perfectly reproducible and very annoying.

    How can I suspend the computer from the command line, so it wakes up when a scheduled task is run?

  • Answers
  • user643011

    I have found a solution: psshutdown -d -t 0 works!

    You can download it here.

  • KronoS

    shutdown /h has worked for me for years. (C:\Windows\System32\shutdown.exe)


  • Related Question

    windows 7 - What is the command to use to put your computer to sleep (not hibernate)?
  • Eric L

    I want to put my Windows PC (Windows 7) into a sleep state via command line (so I can bind to macro button on keyboard).

    The power button on the PC is setup to but the computer to sleep (but it's down on the floor and I'm too lazy to reach down) it exactly how I want it (sleeps using hybrid mode in case I loose power)

    The sleep command on the shutdown menu also works.

    most info I found says to use;

    %windir%\system32\rundll32.exe PowrProf.dll, SetSuspendState 0,1,0
    

    But this puts the computer in hibernate mode. I do have hibernate disabled but using hybrid sleep.

    So, What is the command to use to put your computer to sleep (not hibernate)?


  • Related Answers
  • Andy Lee

    I found a solution. I installed a freeware program called AutoHotKey and recorded the steps to invoke Start Menu -> Sleep into a script file. Then I complied the script file into a stand-alone executable SleepWin7.exe.

    Now I simply run SleepWin7.exe to put my computer into hybrid sleep.

    You may uninstall AutoHotKey if this is all you need it for.


    Update: The above solution doesn't work when the user isn't logged in, i.e. Windows 7 Login Screen. (My computer wakes up at 4am every Sunday to perform weekly backup, which is done without user login.) In such case, the Wizmo program still works:

    wizmo.exe quiet standby!

  • DMA57361

    Hope you find these useful.

    Shutdown %windir%\System32\shutdown.exe -s

    Reboot %windir%\System32\shutdown.exe -r

    Logoff %windir%\System32\shutdown.exe -l

    Standby %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

    Hibernate %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

  • harrymc

    See the free utility of Wizmo, which can do very many things.
    The command you're looking for is probably:

    wizmo standby

  • Revolter

    to disable hibernate mode you need to use

    powercfg -h off
    

    now, rundll32 powrprof.dll,SetSuspendState will put your station in stanby mode

    [EDIT]

    actually I can't setup for an hybrid sleep because I have a laptop (a state that is not available on mobile stations), for hybrid sleep you need to have hibernation enabled and some say that rundll32 powrprof.dll,SetSuspendState trigger the default sleep mode in your control-panel\power-management settings. please try if rundll32 powrprof.dll,SetSuspendState hybrid sleep give some results.

  • Sathya

    You can create a file with extension .ps1 (powershell) like "sleep.ps1" and write this:

    Add-Type -Assembly System.Windows.Forms
    [System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)
    

    I use this when I have something running and have to leave the pc and don't want to turn it off. So I change the script to look like this:

    $secs = read-host "Enter minutes to wait until sleep";
    $minutes= 60*$secs;
    Start-sleep -s $minutes
    
    Add-Type -Assembly System.Windows.Forms
    [System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)
    

    And now when I run it, I just enter the minutes I want to wait until sleep.

    You can run this from the cmd line by writing

    powershell sleep.ps1
    

    If you've never run a PowerShell script before, you'll want to first run

    Set-ExecutionPolicy RemoteSigned
    

    to enable script running. This only has to be run once.

  • dim77x

    Make a bat file, where 600 is delay in seconds.

    ping -n 600 -w 1 127.0.0.1 > nul

    powercfg -h off

    %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

  • accolade
    psshutdown -d
    

    using the Command Line tool PsShutdown from Sysinternals' PsTools [download].

    (You might prefer this solution if you already have downloaded PsTools, it's pretty widely used. Other than that, this approach is equivalent to using wizmoquiet standby.)

    Source: http://superuser.com/a/331545/21887

  • jjlin

    I've been using this SLEEP.EXE utility for years. It works well, and you don't have to remember what arguments to give it for suspend mode (its default form of "sleep").

  • Simon

    If you're competent with compiling a .NET program the following command will do this

    System.Windows.Forms.Application.SetSuspendState(PowerState.Suspend, 
                                                     false,   /* force */
                                                     true     /* disableWake */);
    

    Note: You do not need to disable hibernation as is required by the rundll32 powrprof.dll,SetSuspendState command. You can also use PowerState.Hibernate which will hibernate the machine if you want.

    You could easily compile an EXE with this command with any version of Visual Studio. Just create a console application and add a reference to the System.Windows.Forms DLL.