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
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
Please also mark the comments that contributed to the solution of the article
Content-ID: 1049093053
Url: https://administrator.de/forum/powershell-powercfg-exe-aktuelles-energieshema-speichern-und-wiederherstellen-1049093053.html
Printed on: January 23, 2025 at 16:01 o'clock
6 Comments
Latest comment
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
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
Moin,
ich würde einfach vorher mit
das Schema "Höchstleistung" aktivieren. Und nacher mit
das gewünschte wieder einschalten. $hoechstleistung und $original_schema müssen natürlich mit den entsprechenden GUIDs ersetzt werden. Die bekommst Du mit
hth
Erik
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
# 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
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
Grüße Uwe
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()
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.Kann man über Win32_PowerPlan bestimmte Geräte (Bildschirm, USB-Platten) beeinflussen?
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()
}