emeriks
Goto Top

Windows Kommandozeile - Set Power State

Hi,
wie kann man unter Windows per Kommandozeile (auch PowerShell) den Energiezustand des Computers setzen?

z.B. mit
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
kann man sofort in den Sleep Modus wechseln.

Ich will aber nur den Power State wechseln, z.B. Mode 2 - Power Save - Low Power Mode.

Angeblich soll man das mit der Methode SetPowerState der CIM-KLasse CIM_ComputerSystem machen können, aber unter Win11 Pro wird mir gemeldet, dass diese Methode unbekannt wäre. Auch über Win32_ComputerSystem oder CIM_UnitaryComputerSystem geht das nicht.

Wie kann ich das mit Bordmitteln bewerkstelligen?

Anmerkung:
Ich will nicht das Power Schema ändern! (Energiesparplan)

E.

Content-Key: 3219748128

Url: https://administrator.de/contentid/3219748128

Printed on: April 19, 2024 at 08:04 o'clock

Member: colinardo
colinardo Jun 30, 2022 updated at 15:40:44 (UTC)
Goto Top
Servis @emeriks,
schau mal hier rein
https://github.com/AaronKelley/PowerMode
https://docs.microsoft.com/en-us/windows-hardware/customize/desktop/cust ...
Dann kannst du per Powershell den Mode so mit der Powershell ändern
Zur Info: Das folgende ändert nicht den Energiesparplan!
Add-Type -MemberDefinition '
    [DllImportAttribute("powrprof.dll", EntryPoint = "PowerSetActiveOverlayScheme")] public static extern uint PowerSetActiveOverlayScheme(Guid OverlaySchemeGuid);
    [DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetEffectiveOverlayScheme")] public static extern uint PowerGetEffectiveOverlayScheme(out Guid EffectiveOverlayGuid);    
' -Namespace win32 -Name power


# zu aktivierenden Modus auskommentieren (folgende GUIDs sind die Defaults, können sich aber je nach System unterscheiden => dann auslesen, Registry oder mit u.a. Methode)

# Better Battery mode (battery saver)
[win32.power]::PowerSetActiveOverlayScheme([GUID]"961cc777-2547-4f9d-8174-7d86181b8a7a")

# Better Performance mode
# [win32.power]::PowerSetActiveOverlayScheme([GUID]"3af9B8d9-7c97-431d-ad78-34a8bfea439f")

# Best performance mode (high performance mode)
# [win32.power]::PowerSetActiveOverlayScheme([GUID]"ded574b5-45a0-4f42-8737-46345c09c238")

Du kannst die aktuelle OverlayGUID auch per Code auslesen
Add-Type -MemberDefinition '  
    [DllImportAttribute("powrprof.dll", EntryPoint = "PowerSetActiveOverlayScheme")] public static extern uint PowerSetActiveOverlayScheme(Guid OverlaySchemeGuid);  
    [DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetEffectiveOverlayScheme")] public static extern uint PowerGetEffectiveOverlayScheme(out Guid EffectiveOverlayGuid);      
' -Namespace win32 -Name power  

[guid]$currentOverlayGUID = [guid]::Empty
[win32.power]::PowerGetEffectiveOverlayScheme([ref]$currentOverlayGUID)
$currentOverlayGUID

Hoffe das war das was du suchst.
Grüße Uwe
Member: emeriks
emeriks Jul 01, 2022 at 07:37:31 (UTC)
Goto Top
Danke, aber nee, das funktioniert nicht. Da passiert gar nichts.

Bei

[win32.power]::PowerSetActiveOverlayScheme(....

liefert er einfach nur "0" und nichts passiert.

E.
Member: colinardo
colinardo Jul 01, 2022 updated at 07:55:20 (UTC)
Goto Top
Zitat von @emeriks:

Danke, aber nee, das funktioniert nicht. Da passiert gar nichts.
Klappt hier im Test auf einem Windows 11 Notebook problemlos.
Bei

[win32.power]::PowerSetActiveOverlayScheme(....

liefert er einfach nur "0" und nichts passiert.
Der RückgabeCode der Funktion 0 bedeutet Erfolg. Weitere Ausgaben gibt es nicht. Du musst nur die richtig GUID verwenden bzw. auslesen wenn diese auf deinem System anders ist, s. Hinweise in den Links oben!
Member: TomTomBon
TomTomBon Jul 01, 2022 at 07:48:06 (UTC)
Goto Top
Moin

Unter Win11 funktionieren bei mir meistens die Sachen die Ich noch von W7 habe face-smile

Aber die Unterstützung Treiberseitig ist noch zickiger als unter W10 (Hybernate..)


Ich habe eine neue Verkünpfung erstellt wo Ich die Zeile als Ziel eingegeben habe.
Und ein entsprechendes Icon face-wink

Ruezustand:
C:\Windows\System32\rundll32.exe powrprof.dll,SetSuspendState

Herunterfahren
C:\Windows\System32\shutdown.exe /s /t 10

Neustart
C:\Windows\System32\shutdown.exe /r /t 2

Abmelden
C:\Windows\System32\shutdown.exe /L /F

Standby
C:\Windows\System32\rundll32.exe powrprof.dll,SetSuspendState Sleep
Member: emeriks
emeriks Jul 01, 2022 at 07:55:37 (UTC)
Goto Top
Zitat von @colinardo:
Du musst nur die richtig GUID verwenden bzw. auslesen wenn diese auf deinem System anders ist, s. Hinweise in den Links oben!
Sorry, das habe ich nicht erwähnt.
Da wird mir nur eine Null-GUID geliefert. (Alles "0").
Member: colinardo
colinardo Jul 01, 2022 updated at 07:58:06 (UTC)
Goto Top
Zitat von @emeriks:
Da wird mir nur eine Null-GUID geliefert. (Alles "0").
Wenn kein Overlay gesetzt ist ist das normal. Du musst den Slider mal mal manuell nach Links oder rechts ziehen, dann die GUID nochmal auslesen (Registry oder o.g. Funktion), diese kannst du dann beim Setzen mit PowerSetActiveOverlayScheme verwenden um das entsprechende Profil zu aktivieren.
Member: emeriks
emeriks Jul 01, 2022 at 08:01:24 (UTC)
Goto Top
Zitat von @TomTomBon:
Ruezustand:
C:\Windows\System32\rundll32.exe powrprof.dll,SetSuspendState
Standby
C:\Windows\System32\rundll32.exe powrprof.dll,SetSuspendState Sleep
Da kommt das gleich bei raus.

Und es ist nicht das, was ich suche.

Ich will nur, dass der Rechner in den Energiesparmodus wechselt, sodass er sofort wieder anspringt, wenn einer seiner Dienste über Netzwerk angesprochen wird. z.B. RDP, oder eine Freigabe. Ohne, dass man vorher ein Magic Packet senden muss (WOL).
Member: colinardo
Solution colinardo Jul 01, 2022 updated at 08:07:26 (UTC)
Goto Top
Zitat von @emeriks:
Ich will nur, dass der Rechner in den Energiesparmodus wechselt, sodass er sofort wieder anspringt, wenn einer seiner Dienste über Netzwerk angesprochen wird. z.B. RDP, oder eine Freigabe. Ohne, dass man vorher ein Magic packet sendet muss (WOL).
Ich glaube wir sprechen hier von zwei unterschiedlichen Dingen, meine Info oben setzt den Powerzustand des Prozessors, der PC wechselt hierbei also nicht in einen Standbymodus!

Für Suspend mit Wakeup-Events geht z.B. folgendes
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $false)  
Application.SetSuspendState(PowerState, Boolean, Boolean) Methode
wenn einer seiner Dienste über Netzwerk angesprochen wird. z.B. RDP, oder eine Freigabe
Das muss in den NIC Einstellungen aber auch aktiviert sein.
Member: emeriks
emeriks Jul 01, 2022 at 08:06:56 (UTC)
Goto Top
Zitat von @colinardo:
Wenn kein Overlay gesetzt ist ist das normal. Du musst den Slider mal mal manuell nach Links oder rechts ziehen, dann die GUID nochmal auslesen (Registry oder o.g. Funktion), diese kannst du dann beim Setzen mit PowerSetActiveOverlayScheme verwenden um das entsprechende Profil zu aktivieren.
Hmm, jetzt kann ich nicht folgen, was Du meinst. Welchen Slider?
Member: colinardo
colinardo Jul 01, 2022 updated at 08:08:39 (UTC)
Goto Top
Zitat von @emeriks:
Hmm, jetzt kann ich nicht folgen, was Du meinst. Welchen Slider?
Öhm , das zum Thema gepostete Links lesen face-sad. Ich bin jetzt raus...
Member: emeriks
emeriks Jul 01, 2022 updated at 08:38:02 (UTC)
Goto Top
Zitat von @colinardo:
Ich glaube wir sprechen hier von zwei unterschiedlichen Dingen, meine Info oben setzt den Powerzustand des Prozessors, der PC wechselt hierbei also nicht in einen Standbymodus!
Und ich hatte schon an mir selbst gezweifelt ...

Das muss in den NIC Einstellungen aber auch aktiviert sein.
Ja, klar. Ist es.

Für Suspend mit Wakeup-Events geht z.B. folgendes
Das ist es. Danke!

Wieso weißt Du sowas, und ich nicht? face-wink
Member: colinardo
colinardo Jul 01, 2022 at 08:20:41 (UTC)
Goto Top
Zitat von @emeriks:
Wieso weißt Du sowas, und ich nicht? face-wink
Wenn ich das wüsste face-smile?!