kreuzberger
Goto Top

Powershell, powercfg.exe - aktuelles Energieshema speichern und wiederherstellen

Tach Gemeinde,

ich habe ein Powershell script für robocopy-Backups geschrieben, welches mir mehrere Aufrufe von "robocopy" mit individuellen Parametern Daten auf USB-Platten schaufelt. Das klappt soweit gut. (Ich benutze sonst Veeam und LTO, ich muss nicht über Sinn und Unsinn von robocopy informiert werden.)

Leider dauert das eine Weile, und somit kommen mir die Energie-Optionen des Win10-Rechners, auf dem das läuft in die Quere. Ich möchte daher vor den "Robocop"-Aufrufen

- die aktuelle Energieeinstellung mit allen Parametern temporär speichern (in Variable / in Datei)
- die Energieeinstellung auf volle Power setzen (Kein abschalten der USB Platten und Bildschirm, Kein Ruhezustand, volle Power) setzen
- Robocopy ausführen
- und schliesslich genau den alten Energieeinstellung-Zustand wiederherstellen.

Das sollte mit Powercfg gehen, oder auch mit Registrie-Beeinflussung.

Aber wie mache ich das perfekt?
Man kann davon ausgehen, dass das Powershellscript mit Administratorrechten ausgeführt wird.


Ich kann mir auch alternativ vorstellen, dass man (per Powershell) ein neues Energieeinstellungsprofil namens "Robocopy" neu erstellt und dann eben nur aufruft. Hier geht es vor allem darum, dass die USB Platten nicht in Ruhezustand versetzt werden dürfen und der Bildschirm (Sichtkontrolle ob das Backup-script auch läuft) nicht abgeschaltet wird.
Das Profil sollte aber per Powershell erstellt werden.

Danke
Kreuzberger

Content-Key: 1049093053

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

Printed on: April 26, 2024 at 12:04 o'clock

Member: PeterPanter
PeterPanter Jul 19, 2021 updated at 11:39:29 (UTC)
Goto Top
Moin,

powercfg.exe -LIST

du kannst dir mit -DUPLICATESCHEME ein eigenes Schema erstellen, das dann mit -SETACTIVE aktivieren und mit -CHANGE entsprechende Einträge ändern.

Das richtig Schema auszuarbeiten geht wahrscheinlich in der GUI am einfachsten und dann mit -EXPORT einmal sichern und mit -IMPORT zur Laufzeit ins System bringen und aktivieren.

Bei Bedarf mit -DELETE am Ende das Schema wieder löschen.

/pp
Member: erikro
erikro Jul 19, 2021 at 15:50:45 (UTC)
Goto Top
Moin,

ich würde einfach vorher mit

powercfg /setactive $hoechstleistung

das Schema "Höchstleistung" aktivieren. Und nacher mit

powercfg /setactive $original_schema

das gewünschte wieder einschalten. $hoechstleistung und $original_schema müssen natürlich mit den entsprechenden GUIDs ersetzt werden. Die bekommst Du mit

powercfg /list

hth

Erik
Mitglied: 149062
149062 Jul 20, 2021 at 07:36:49 (UTC)
Goto Top
# aktuelle Profil GUID
$active = (powercfg -getactivescheme) -replace '.*?\b([\da-f-]+)\b.*','$1'  
# Höchstleistung
powercfg -setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
# ...... tu was
# reset
powercfg -setactive $active
Member: colinardo
Solution colinardo Jul 20, 2021 updated at 07:55:24 (UTC)
Goto Top
Servus,
dafür braucht man nicht mehr Powercfg in der Konsole auslesen, dafür gibt es schon lange eine native WMI Klasse namens Win32_PowerPlan
# aktuellen Energieplan auslesen
$active = gwmi win32_PowerPlan -Namespace "root\cimv2\power" | ? IsActive  
# Höchstleistungsprofil aktivieren
gwmi win32_PowerPlan -Namespace "root\cimv2\power" | ? InstanceId -eq 'Microsoft:PowerPlan\{8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c}' | %{$_.Activate()}  

#  hier etwas machen

# und abschließend ursprüngliches Profil aktivieren
$active.Activate()
Grüße Uwe
Member: kreuzberger
kreuzberger Jul 20, 2021 at 10:10:16 (UTC)
Goto Top
Hallo colinardo

das scheint echt kuhl zu sein! Ich probiere das nachher mal aus.
Wenn es so klappt, ist es (Fast) PERFEKT!

Kann man über Win32_PowerPlan bestimmte Geräte (Bildschirm, USB-Platten) beeinflussen?

Danke
Kreuzberger
Member: colinardo
Solution colinardo Jul 20, 2021 updated at 13:00:31 (UTC)
Goto Top
Zitat von @kreuzberger:
Kann man über Win32_PowerPlan bestimmte Geräte (Bildschirm, USB-Platten) beeinflussen?
Wenn du damit die Stromspar-Settings für Geräte-Kategorien die der Plan beinhaltet, dann ja, bestimmte einzelne Geräte = nein.
Welche GUIDs das sind kannst du mit powercfg /q in Erfahrung bringen.

Beispiel um den Timeout wann ein Monitor im AC Mode im aktuellen Profil abgeschaltet wird (in Sekunden) zu setzen
$p = gwmi win32_PowerPlan -Namespace "root\cimv2\power" | ? IsActive  
$p.GetRelated("win32_powersettingdataindex") | ? InstanceId -like '*{3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e}' | ?{$_.InstanceId.split('\')[2] -eq 'AC'} | %{  
    $_.SettingIndexValue = 1200
    $_.psbase.Put()
}