Thread Starter
- Mitglied seit
- 26.07.2017
- Beiträge
- 870
Hallo zusammen,
ich habe ein Skript geschrieben, dass automatisch den Windows Energiesparplan in Abhängigkeit von der Nvidia-GPU Auslastung und P-State ändert (Nur mit Nvidia Grafikkarten kompatibel). Damit kombiniere ich den "Balanced" Energiesparplan für Non-Gaming mit dem "High Performance" Energiesparplan, während die Grafikkarte belastet ist, ich also am zocken bin.
Anleitung
Ab dem nächsten Windows-Start läuft nun mit 1 Minute Verzögerung das Skript und prüft alle 60 Sekunden die GPU-Auslastung, um dann den Windows Energiesparplan entsprechend zu setzen. Im Task Manager läuft das Skript dann als "powershell.exe". Während ich hier also in Firefox diese Zeilen verfasse, ist der Balanced Energieplan aktiv, sobald ich aber ein Game starte, wird nach wenigen Sekunden in den High Performance Energiesparplan gewechselt. Getestet unter Windows 11 mit einer RTX 4070 Ti und einem Standard Nvidia Treiber.
Voraussetzung
Ihr müsst die PowerShell Restriction Policy auf Unrestricted konfigurieren, damit solche Skripts ohne Signatur ausgeführt werden.
De Änderung kann auch wieder rückgängig gemacht werden - dann funktioniert aber ggf. der PowerPlan Switcher nicht mehr.
Funktionsprüfung
Ihr könnt das Skript starten und zum Beispiel ein Spiel starten oder den GPU-Z Render Test. Hier wird das Skript dann nach spätestens einer Minute im nächsten Prüfinterval den GamingPowerPlan aktivieren. Nach Beendigung des Spiels wird der Non-Gaming PowerPlan automatisch eingerichtet. Wenn ihr das ganze in der Aufgabenplanung als Task laufen lässt, seht ihr die Anwendung im Task Manager als powershell.exe
Kein Support bei Einrichtungsproblemen
Das Skript ist für Tech versierte User, die mindestens Grundkenntnisse im Bereich Skripts haben. Das Skript funktioniert bestens und ist Jahre geprüft, wer aber die Einrichtung in PowerShell nicht hinbekommt, soll bitte ChatGPT bemühen. Ich gebe keinen individuellen Support auf die Einrichtung in PowerShell (Restriction Policy) oder Aufgabenplanung.
ich habe ein Skript geschrieben, dass automatisch den Windows Energiesparplan in Abhängigkeit von der Nvidia-GPU Auslastung und P-State ändert (Nur mit Nvidia Grafikkarten kompatibel). Damit kombiniere ich den "Balanced" Energiesparplan für Non-Gaming mit dem "High Performance" Energiesparplan, während die Grafikkarte belastet ist, ich also am zocken bin.
- Sobald die Grafikkarte in den P0 (Performance State) wechselt und mehr als 25% GPU-Auslastung hat: High Performance
- Während die Grafikkarte in einem Energiesparmodus ist oder weniger als 25% GPU-Auslastung hat: Balanced
- Alle Parameter sind im Block ## To Fill ## frei konfigurierbar
- Das Skript verursacht keine nennenswerte Auslastung
- Beim Browsen wird Strom gespart, beim Zocken sind die Latenzen minimiert
- Das Umschalten erfolgt automatisch und die Parameter können im Skript konfiguriert werden
Code:
## To Fill
$NvidiaSMIFolderPath = "C:\Windows\System32"
$GamingPState = "P0"
$MinGPUUsage = 25
$CheckEverySeconds = 60
$GamingPowerPlanID = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
$NoGamingPowerPlanID = "381b4222-f694-41f0-9685-ff5bb260df2e"
## Get PowerPlan IDs with powercfg /l
## Power Plans IDs for me 08/2025
#Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (Balanced) *
#Power Scheme GUID: 4a11dee1-b74e-44e6-ab32-c2a53087eeb3 (Ultimate Performance)
#Power Scheme GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c (High performance)
#Power Scheme GUID: a1841308-3541-4fab-bc81-f71556f20b4a (Power saver)
$SMICommand = "& '" + $NvidiaSMIFolderPath + "\nvidia-smi.exe`' --query-gpu=pstate,utilization.gpu --format=csv,noheader,nounits"
Write-Host PowerPlan Switcher is now active. Monitoring GPU Load...
while ($true){
$GPUData = (Invoke-Expression -command $SMICommand).split(",")
if ($GPUData[0] -eq $GamingPState -and [int]$GPUData[1] -ge $MinGPUUsage){
if ((powercfg /GetActiveScheme) -notlike ("*" + $GamingPowerPlanID + "*")){
powercfg -s $GamingPowerplanID
Write-Host Enable Gaming Power Plan $GamingPowerPlanID
}
}
else{
if ((powercfg /GetActiveScheme) -notlike ("*" + $NoGamingPowerPlanID + "*")){
powercfg -s $NoGamingPowerPlanID
Write-Host Enable Normal Power Plan $GamingPowerPlanID
}
}
Start-Sleep -Seconds $CheckEverySeconds
}
- Kopiert den Skript Code in eine Textdatei auf eurem Computer und benennt diese von .txt zu .ps1 um (in meinem Beispiel C:\Install\Skripts\Nvidia_PowerPlanSwitcher\Nvidia_PowerPlanSwitcher.ps1)
- Konfiguriert im Skript die Werte im Bereich #To Fill
- Das Skript kann jetzt ausgeführt werden (Rechtsklick > Run with PowerShell) und läuft so lange, bis es geschlossen wird. Am meisten Sinn macht es natürlich das Skript im Hintergrund unsichtbar laufen zu lassen, in meinem Fall über die Windows Aufgabenplanung. Das könnt ihr wie folgt umsetzen.
Öffnet die Aufgabenplanung (Task Scheduler in eng) und geht auf "Neue Aufgabe erstellen / Create Task". Folgt nun den Bildern.
Voraussetzung
Ihr müsst die PowerShell Restriction Policy auf Unrestricted konfigurieren, damit solche Skripts ohne Signatur ausgeführt werden.
- Powershell als Administrator ausführen
- In die geöffnete PowerShell folgende Zeile eingeben
Code:
Set-ExecutionPolicy Unrestricted
Code:
Set-ExecutionPolicy Restricted
Funktionsprüfung
Ihr könnt das Skript starten und zum Beispiel ein Spiel starten oder den GPU-Z Render Test. Hier wird das Skript dann nach spätestens einer Minute im nächsten Prüfinterval den GamingPowerPlan aktivieren. Nach Beendigung des Spiels wird der Non-Gaming PowerPlan automatisch eingerichtet. Wenn ihr das ganze in der Aufgabenplanung als Task laufen lässt, seht ihr die Anwendung im Task Manager als powershell.exe
Kein Support bei Einrichtungsproblemen
Das Skript ist für Tech versierte User, die mindestens Grundkenntnisse im Bereich Skripts haben. Das Skript funktioniert bestens und ist Jahre geprüft, wer aber die Einrichtung in PowerShell nicht hinbekommt, soll bitte ChatGPT bemühen. Ich gebe keinen individuellen Support auf die Einrichtung in PowerShell (Restriction Policy) oder Aufgabenplanung.
Zuletzt bearbeitet: