Stromspar-Script

Ich nutze mein Notebook zu 90% stationär. Entsprechend laufen da ganz viele Tools, die bei der täglichen Arbeit wichtig oder nützlich sind: Dropbox, Synology CloudStation-Client, StreamDeck-Controller, MouseWithoutBorders/Input Director uvam.

Unterwegs aber stören diese Programme nur. Synchronisation meines Cloud-Speichers frisst unnötig Akkuleistung und u.U. auch Datentransfer und Bandbreite. Wenn ich nicht an meinem Schreibtisch bin, brauche ich auch keine Software, die mir das Leben mit drei PCs nebeneinander erleichtert. Uvam.

Darum habe ich mir ein Script gebastelt, das beim Ab- und Anstöpseln des Netzkabels unnötige Prozesse beendet bzw. wieder startet. 

Das Script

Man lege sich irgendwo z.B. in c:\Programme\order-fuer-diverses eine Datei akkustartstop.cmd an mit folgendem Inhalt:

@echo off

rem credits: znil.net/index.php/Windows_Batterie_Akku_Status_per_WMI_abfragen
FOR /f "tokens=*" %%a IN ('wmic path win32_battery get BatteryStatus ^| findstr /r "[0-9][0-9]*"') do set BATTERYSTATUS=%%a
REM Die Variable enthält noch Leerzeichen - entfernen:
SET BATTERYSTATUS=%BATTERYSTATUS: =%
IF "%BATTERYSTATUS%"=="1" goto Akku
IF "%BATTERYSTATUS%"=="2" goto Strom
IF "%BATTERYSTATUS%"=="3" goto Akku
IF "%BATTERYSTATUS%"=="4" goto LeererAkku
IF "%BATTERYSTATUS%"=="5" goto LeererAkku
IF "%BATTERYSTATUS%"=="6" goto Strom
IF "%BATTERYSTATUS%"=="7" goto Strom
IF "%BATTERYSTATUS%"=="8" goto Strom
IF "%BATTERYSTATUS%"=="9" goto Strom
IF "%BATTERYSTATUS%"=="10" goto Strom
IF "%BATTERYSTATUS%"=="11" goto Akku

goto Ende

:Strom
"C:\Program Files (x86)\Synology\CloudStation\bin\launcher.exe"
start /D "C:\Program Files (x86)\Dropbox\Client" Dropbox.exe
ipconfig |find "192.168.123.123" > NUL
if %errorlevel% equ 1 goto Ende
rem Wir sind zuhause, darum noch:
echo Willkommen daheim
"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Garage\Mouse without Borders.lnk"
"C:\Program Files\Elgato\StreamDeck\StreamDeck.exe"
goto Ende

:Akku
:LeererAkku
taskkill /IM "cloud-drive*" /F
taskkill /IM "Dropbox*" /F
taskkill /IM "MouseWithoutBorders*" /F
taskkill /IM "StreamDeck.exe" /F
goto Ende

:Ende

Die CMD-Datei, wenn sie aufgerufen wird, ermittelt den Batteriestatus und schreibt ihn in eine gleichnamige Variable. Wie das genau geht kann man an der verlinkten Quelle nachlesen, ich hab diesen Teil nur kopiert. Danach geht's mittels Goto zum richtigen Kontext. Bei mir sind's "Strom" oder "Akku", und da werden entweder Programme gestartet oder sie werden gekillt. Es erfordert ein bisschen Rumprobieren, mache Programme möchten mit "start", manche ohne gestartet werden, manche nur über den Umweg einer Verknüpfung, aber wenn man die richtige Konfiguration raus hat, funktioniert es zuverlässig.

Bei Lade-Betrieb wird noch geguckt, ob in der lokalen IP-Konfiguration meine Home-IP gefunden wird - wenn ja, bin ich daheim und es werden noch ein paar mehr Prozesse gestartet als wenn ich beim Kunden am Strom hänge.

Über die IP-Adresse könnte man auch weitere Abfragen machen und neben dem Heimnetz vielleicht meinen GlocalMe (Mobilfunk-Hotspot) oder meinen WLAN-Würfel identifizieren. So könnte man je nach Netzwerk z.B. Dropbox&Co auch nur ausführen lassen, wenn das zum WLAN passt.

Der dazugehörige scheduled task

Wenn das Script tut, was es soll, kommt Schritt 2: 

  • Öffne die Aufgabenplanung (task scheduler)
  • Lege dort eine neue Aufgabe an
  • Allgemein: Name "Anwendungen starten und stoppen bei Akkubetrieb", "[X] Nur ausführen wenn der Benutzer angemeldet ist" und wenn nötig "mit höchsten Privilegien ausführen"
  • Trigger anlegen: Aufgabe starten "bei Anmeldung" - "Jedes Benutzers". Damit wird sichergestellt, dass das Script beim Aufwecken des Rechners gestartet wird (könnte ja sein, dass der Rechner zwischendurch abgestöpselt wurde, als er aus war)
  • Weiteren Trigger anlegen: Aufgabe starten "bei einem Ereignis" - "minimal" - Protokoll: "System" - Quelle "Kernel-Power" - Ereignis-ID: 105
  • Aktionen: Programm starten - und dort dann einfach die CMD-Datei auswählen

Fertig. Wo man gerade im Task Scheduler ist, lohnt es sich, da mal aufzuräumen. Natürlich ist es wichtig, dass regelmäßig Updates aller Dropbox-, Adobe-, Google-, Microsoft-, Druckertreiber-, Hund-vom-Nachbarn- sonstwas Softwareprodukte eingespielt werden. Aber "täglich um 11:14 Uhr und dann 24 Stunden lang jede Stunde wiederholen" - ernsthaft? Kein Wunder, dass PCs nach ein paar Jahren langsamer werden, wenn im Schnitt alle 2-3 Minuten irgend ein Prozess startet und seinen Hersteller anfunkt. Das kann man, wenn einem die Akkulaufzeit wichtig ist, entweder reduzieren oder in den Bedingungen "nur starten, falls Computer im Netzbetrieb ausgeführt wird" auswählen.

Unnötige Prozesse im Akkubetrieb minimieren

Feedback