[Guide] [Skript] Windows PowerPlan Switcher for Nvidia

Stunrise

Enthusiast
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.
  • 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
Gerade bei Gaming hat der Prozessor sehr schwankende Last, sodass mit dem Balanced Energiesparplan im GPU-Limit deutliche Latenzen und Lagspikes entstehen können, weil Prozessorkerne bei niedriger Last heruntertakten und dann bei einer Lastspitze erst wieder hochtakten müssen. Je nach Spiel sind die Auswirkungen nicht vorhanden (Quantum Break) bis zu extrem störend (Overwatch oder Nioh).
  • 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
}
Anleitung
  1. 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)
  2. Konfiguriert im Skript die Werte im Bereich #To Fill
  3. 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.
1754028570666.png


1540043786720.png


1540043799400.png
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.
  1. Powershell als Administrator ausführen
  2. In die geöffnete PowerShell folgende Zeile eingeben
Code:
Set-ExecutionPolicy Unrestricted
De Änderung kann auch wieder rückgängig gemacht werden - dann funktioniert aber ggf. der PowerPlan Switcher nicht mehr.
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:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh