Energieoptionen per PowerShell ändern
Hi,
gibt es eine Möglichkeit um per Scripte zwischen höchsten Energiesparoptionen und maximaler Leistung per Knopfdruck zu wechseln?
Falls es zum jeweiligen OS Unterschiede dabei gibt, dann soll sich die Frage nur auf Windows 10 Pro beziehen.
Gruß,
Stefan
gibt es eine Möglichkeit um per Scripte zwischen höchsten Energiesparoptionen und maximaler Leistung per Knopfdruck zu wechseln?
Falls es zum jeweiligen OS Unterschiede dabei gibt, dann soll sich die Frage nur auf Windows 10 Pro beziehen.
Gruß,
Stefan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 351561
Url: https://administrator.de/forum/energieoptionen-per-powershell-aendern-351561.html
Ausgedruckt am: 21.12.2024 um 14:12 Uhr
18 Kommentare
Neuester Kommentar
Schon mal was von powercfg gehört?!
Win 7 Energiesparplan - Direkter und Rotierender wechsel (in der Taskleiste)
Win 7 Energiesparplan - Direkter und Rotierender wechsel (in der Taskleiste)
Servus,
hier mal ein Beispiel, wie man diverse Settings macht:
In Zeile 15 wird das Schema gesetzt...
hier mal ein Beispiel, wie man diverse Settings macht:
@echo off
CHCP 1252
:: unplugged
set "u_monitor=10"
set "u_standby=15"
set "u_hibernate=0"
:: plugged in
set "p_monitor=0"
set "p_standby=0"
set "p_hibernate=0"
REM (Höchstleistung)
powercfg -SETACTIVE 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
REM (Ausbalanciert)
REM powercfg -SETACTIVE 381b4222-f694-41f0-9685-ff5bb260df2e
REM (Energiesparmodus)
REM powercfg -SETACTIVE a1841308-3541-4fab-bc81-f71556f20b4a
::Set the unplugged settings
powercfg.exe -change -monitor-timeout-dc %u_monitor%
powercfg.exe -change -standby-timeout-dc %u_standby%
powercfg.exe -change -hibernate-timeout-dc %u_hibernate%
::Set the plugged in settings
powercfg.exe -change -monitor-timeout-ac %p_monitor%
powercfg.exe -change -standby-timeout-ac %p_standby%
powercfg.exe -change -hibernate-timeout-ac %p_hibernate%
In Zeile 15 wird das Schema gesetzt...
@echo off &setlocal DisableDelayedExpansion
:: Alle Energiesparpläne mit Name und GUID, sowie Index des aktiven Energiesparplans speichern
set "n="
for /f "tokens=1,2* delims=:" %%g in (
'powercfg -list^|findstr /rc:": [0-9a-f][0-9a-f]*-[0-9a-f][0-9a-f]*-[0-9a-f][0-9a-f]*-[0-9a-f][0-9a-f]*-[0-9a-f][0-9a-f]* "^|findstr /n .'
) do for /f "tokens=1*" %%j in ("%%i") do for /f "tokens=1* delims=()" %%l in ("%%k") do (
set /a "n=%%g"
set "guid%%g=%%j"
set "name%%g=%%l"
if "%%m" neq "" set "active=%%g"
)
if not defined n exit /b
:: Gefundene Energiesparpläne zur Auswahl stellen
setlocal EnableDelayedExpansion
for /l %%i in (1 1 %n%) do (
<nul set /p =%%i - "!name%%i!"
if %%i equ %active% (echo ^(AKTIV^)) else echo(
)
echo ~~~~~~~~~~~~~~
:: Eingabeaufforderung und eingegebenen Wert prüfen
:input_loop
set "idx=_"
set /p "idx=Neues Energieschema: "
call :check idx 1 %n% || goto input_loop
:: Ausgewählten Energiesparplan aktivieren und Scriptausführung beenden
powercfg -setactive !guid%idx%!
exit /b
:: Subroutine für die Prüfung des eingegebenen Werts
:check VarName Min Max
setlocal EnableDelayedExpansion
for /f "delims=1234567890 eol=" %%i in ("!%~1!") do (endlocal &exit /b 1)
2>nul set /a "dummy=!%~1!" || (endlocal &exit /b 1)
if "!%~1!" neq "%dummy%" (endlocal &exit /b 1)
if %dummy% lss %~2 (endlocal &exit /b 1)
if %dummy% gtr %~3 (endlocal &exit /b 1)
endlocal &exit /b 0
Ist allerdings auch nur Batch und nicht Powershell.
Grüße
Steffen
powercfg lässt sich ja problemlos auch in der powershell Konsole verwenden.
Joa kann man, hatte ich aber nicht parat.
Versuch:
Grüße
Steffen
Versuch:
# Alle Energiesparpläne als Matches-Array speichern
$matches_arr = (powercfg -l) |
Select-String -Pattern "^.+ ([0-9A-Fa-f]{8}(-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12})\s+\((.+)\)\s*(\**)$" |
%{$_.Matches}
# Gefundene Energiesparpläne zur Auswahl stellen
for ($i=0; $i -lt $matches_arr.Length; $i++) {
Write-Host ($i + 1) - `"$($matches_arr[$i].Groups[3].Value)`" $(If ($matches_arr[$i].Groups[4].Value -eq "*") {"(AKTIV)"})
}
"~~~~~~~~~~~~~~"
# Eingabeaufforderung und eingegebenen Wert prüfen
do {
try {
$idx = [int]$(Read-Host -Prompt "Neues Energieschema")
}
catch {}
} until ($idx -gt 0 -and $idx -le $matches_arr.Length)
# Ausgewählten Energiesparplan aktivieren
powercfg -setactive $matches_arr[$idx - 1].Groups[1].Value
Steffen
OK, um die Verwirrung mal zu beenden ...
Wenn du die beiden GUIDs kennst, zwischen denen du wechseln willst (und falls nicht führe POWERCFG -L in einem Konsolefenster aus), dann ist das doch relativ simpel.
Wenn du die Kontrollausgabe nicht brauchst, schmeißt du sie einfach raus.
Und ... natürlich kannst du vorher deine eigenen Energiesparpläne anlegen und nach deinen Vorstellungen konfigurieren.
Steffen
Wenn du die beiden GUIDs kennst, zwischen denen du wechseln willst (und falls nicht führe POWERCFG -L in einem Konsolefenster aus), dann ist das doch relativ simpel.
@echo off &setlocal
:: Die beiden GUIDs zwischen denen gewechselt wird
set "high=8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
set "low=a1841308-3541-4fab-bc81-f71556f20b4a"
:: Prüfen, welches Schema aktiv ist und das jeweils andere aktivieren
powercfg -l|>nul findstr /e "%high%.*\*"&&(powercfg -setactive %low%)||(powercfg -setactive %high%)
:: Kontrollausgabe
for /f "tokens=2 delims=()" %%i in ('powercfg -l^|findstr /e "\*"') do echo Aktiviert: %%i&>nul timeout 2
Und ... natürlich kannst du vorher deine eigenen Energiesparpläne anlegen und nach deinen Vorstellungen konfigurieren.
Steffen
Wie @rubberman schon richtig erwähnt hat, sind die Zeilen "auskommentiert".
Der Code diente auch nur als Beispiel. Daraus kannst du, wie von rubberman ja schon getan, dir dein Script zusammenstellen.
REM steht für Remark und macht eine Zeile zum Kommentar.
Der Code diente auch nur als Beispiel. Daraus kannst du, wie von rubberman ja schon getan, dir dein Script zusammenstellen.
Hallo rubberman,
ich finde die Batch perfekt, gibt es eine Möglichkeit einen bestimmten Energiesparplan der immer den gleichen Namen hat fest auszuwählen ohne Auswahl?
Hintergrund ist der, dass ich bei einigen Rechnern das Schema "Ultimate Power" aktiviere, nur dann hat dies immer eine andere GUID, somit kann ich das nicht festlegen.
Es müsste quasi die GUID ausgelesen werden und dann die GUID mit dem Namen "Ultimate Power" fest aktiviert werden.
Weißt du wie ich das machen könnte?
Danke im Voraus.
ich finde die Batch perfekt, gibt es eine Möglichkeit einen bestimmten Energiesparplan der immer den gleichen Namen hat fest auszuwählen ohne Auswahl?
Hintergrund ist der, dass ich bei einigen Rechnern das Schema "Ultimate Power" aktiviere, nur dann hat dies immer eine andere GUID, somit kann ich das nicht festlegen.
Es müsste quasi die GUID ausgelesen werden und dann die GUID mit dem Namen "Ultimate Power" fest aktiviert werden.
Weißt du wie ich das machen könnte?
Danke im Voraus.
Zitat von @nikmaier:
Es müsste quasi die GUID ausgelesen werden und dann die GUID mit dem Namen "Ultimate Power" fest aktiviert werden.
Für die Ausführung innerhalb einer Batch:Es müsste quasi die GUID ausgelesen werden und dann die GUID mit dem Namen "Ultimate Power" fest aktiviert werden.
for /f "tokens=4" %%a in ('powercfg -l ^| findstr /ilc:"Ultimate Power"') do powercfg -setactive %%a
Schönen 1. Advent
Gruß A.
Hallo,
jetzt hätte ich doch noch etwas, was ich leider nicht hinbekomme.
Es soll via Batch geschaut werden ob es einen Eintrag bei "powercfg -l" gibt der "Ultimative Leistung" heißt, das wird ja mit dem Tip von answer gemacht:
for /f "tokens=4" %%a in ('powercfg -l ^| findstr /ilc:"Ultimate Power"') do powercfg -setactive %%a
Nun soll folgendes passieren:
Wenn es den Eintrag schon gibt, dann soll dieser aktiviert werden "powercfg -setactive %%a)
wenn es den Eintrag aber nicht gibt, dann soll er erstellt werden mit "powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61" und danach soll dieser aktiv gesetzt werden "for /f "tokens=4" %%a in ('powercfg -l ^| findstr /ilc:"Ultimate Power"') do powercfg -setactive %%a".
Ich es müsste jetzt bestimmt nur richtig zusammen gesetzt werden, aber ich hab jetzt vielen probiert, aber ich bekomm es nicht hin.
Vielleicht kann mir hier noch jemand auf die Sprünge helfen
Schonmal vielen Dank im Voraus.
jetzt hätte ich doch noch etwas, was ich leider nicht hinbekomme.
Es soll via Batch geschaut werden ob es einen Eintrag bei "powercfg -l" gibt der "Ultimative Leistung" heißt, das wird ja mit dem Tip von answer gemacht:
for /f "tokens=4" %%a in ('powercfg -l ^| findstr /ilc:"Ultimate Power"') do powercfg -setactive %%a
Nun soll folgendes passieren:
Wenn es den Eintrag schon gibt, dann soll dieser aktiviert werden "powercfg -setactive %%a)
wenn es den Eintrag aber nicht gibt, dann soll er erstellt werden mit "powercfg -duplicatescheme e9a42b02-d5df-448d-aa00-03f14749eb61" und danach soll dieser aktiv gesetzt werden "for /f "tokens=4" %%a in ('powercfg -l ^| findstr /ilc:"Ultimate Power"') do powercfg -setactive %%a".
Ich es müsste jetzt bestimmt nur richtig zusammen gesetzt werden, aber ich hab jetzt vielen probiert, aber ich bekomm es nicht hin.
Vielleicht kann mir hier noch jemand auf die Sprünge helfen
Schonmal vielen Dank im Voraus.
Dir ist schon klar das du hier einen fremden Thread für deine Zwecke übernimmst?!
Diskussionsrichtlinien - die Regeln zu unseren Inhalten
Und wie man prüfen kann ob es einen Eintrag gibt steht in Rubbermans Thread mit findstr schon fix und fertig drin, brauchst du also nur zusammensetzen.
Diskussionsrichtlinien - die Regeln zu unseren Inhalten
Und wie man prüfen kann ob es einen Eintrag gibt steht in Rubbermans Thread mit findstr schon fix und fertig drin, brauchst du also nur zusammensetzen.