Der Abschaltteil der Frage ist für alle klar.
shutdown.exe /?
Zeigt alle Optionen zum Herunterfahren / Neustarten / Booten erweiterter Optionen / Booten der Firmware an.
Aber ich sehe so viel Aufregung um den Schlaf-Teil.
Jeder bekommt es, rundll32.exe
das nicht zum Aufrufen von Zufallsfunktionen verwendet werden sollte, und es funktioniert hier nur ganz zufällig für den Ruhezustand. Aber das ist die Natur von Windows - eine Black Box, in der sich die Leute herumgetrieben haben und die Hunderte von Workarounds gefunden hat, um einen Job zu erledigen.
Es gibt so viele " richtige " Lösungen für externe Tools , aber ich kann anscheinend kein natives (hybrides / pinvoke / was auch immer) Batch-Skript finden , auch wenn diese Frage über die Jahre hinweg aktiv geblieben ist.
Also hier ist meine einfache 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
Es funktioniert sogar als großer einzeiliger Befehl:
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();"