La parte de apagado de la pregunta está clara para todos.
shutdown.exe /?
muestra todas las opciones de apagado / reinicio / opciones avanzadas de arranque / arranque del firmware.
Pero veo tantos golpes lanzados sobre la parte del sueño.
_Todos entienden que rundll32.exe
no debe ser usado para llamar a funciones aleatorias y sólo funciona aquí para hibernar completamente por coincidencia. Pero esa es la naturaleza de Windows, una caja negra en la que la gente ha buscado y encontrado cientos de soluciones para hacer un trabajo.
Hay tantas soluciones “propias” proponiendo herramientas externas, pero parece que no puedo encontrar un script de lotes nativo (híbrido / pinvoke / lo que sea), incluso si esta pregunta ha permanecido activa a lo largo de los años.
Así que aquí está mi simple * power_sleep.bat **:
@echo off &mode 32,2 &color cf &title Power Sleep
set "s1=$m='[DllImport ("Powrprof.dll", SetLastError = true)]"
set "s2=static extern bool SetSuspendState(bool hibernate, bool forceCritical, bool disableWakeEvent);"
set "s3=public static void PowerSleep(){ SetSuspendState(false, false, false); }';"
set "s4=add-type -name Import -member $m -namespace Dll; [Dll.Import]::PowerSleep();"
set "ps_powersleep=%s1%%s2%%s3%%s4%"
call powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -Command "%ps_powersleep:"=\"%"
exit
Incluso funciona como un gran comando de una línea:
powershell.exe -C "$m='[DllImport(\"Powrprof.dll\",SetLastError=true)]static extern bool SetSuspendState(bool hibernate,bool forceCritical,bool disableWakeEvent);public static void PowerSleep(){SetSuspendState(false,false,false); }';add-type -name Import -member $m -namespace Dll; [Dll.Import]::PowerSleep();"