Schlagwort-Archive: Batch

Windows: Wo ist Java?

Ich bin von Linux ja irgendwie verwöhnt: Alle Binärdateien sind üblicherweise unter /usr/bin und lassen sich direkt über den Namen des Programms aufrufen. Unter Windows gibt es mit $PATH zwar eine ähnliche Funktion, jedoch ist dort meist nur der Systempfad eingetragen. Da es für fast jedes Programm ein eigenes Verzeichnis gibt hat man so keine direkte Möglichkeit ein Programm zu starten ohne an den Systemvariabeln herumzueditieren.

In vielen Fällen nicht wirklich ein Problem – einmal gefunden kann man den Pfad in seinen Scripten hinterlegen und so die Software ansprechen. Leider ist das bei Programmen wie Java nicht so einfach: Diese legen ein Verzeichnis mit der Versionsnummer an, z.B. C:\Program Files\Java\jre_8.0.121\bin\java.exe. Ergebnis: Nach jedem Update versteckt sich die gesuchte EXE an einer anderen Stelle.

Hier ein Quick&Dirty CMD, welches die Java-Binary aufspüren sollte. Nicht Ideal, da z.B. nur das Systemlaufwerk unterstützt wird und diverses Errorhandling fehlt, aber immerhin zuverlässiger als hardcoded…

REM Find Java :/
pushd "%ProgramFiles%\java\jre*\bin\"
echo %JAVADIR%cd > %TEMP%\findjava.txt
set /p JAVADIR=<%TEMP%\findjava.txt
del %TEMP%\findjava.txt
popd
%JAVADIR%\java -jar meinesoftware.jar

 

Powershell über Aufgabenplanung (oder Batch) starten

Bild: https://adlerweb.info/blog/wp-content/uploads/2015/03/logpurgetask-279×300.pngMit der Powershell hat Microsoft zwar keine angenehm zu verwendende, aber immerhin sehr mächtige Konsole geschaffen, welche es ermöglicht eine Vielzahl an Aufgaben unter Windows über Scripte zu steuern. Ein Wichtiger Punkt bei der Automatisierung ist natürlich auch das zeitgesteuerte Ausführen –  im Windows-Jargon „Aufgabenplanung“ bzw. früher „Geplanter Task“. Leider lassen sich Powershell-Scripte nicht direkt als Programm ausführen, daher muss man etwas tricksen: Als Programmname gibt man „C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe“ ein – ja, 1.0 ist korrekt, auch neuere Powershell-Versionen sind in diesem Ordner zu finden. Der Pfad zum eigentlichen Script wird als Argument „-File“ hinterlegt – Anführungszeichen bei Bedarf natürlich nicht vergessen. Schon können Scripte zeitgesteuert – oder durch einen der anderen möglichen Trigger – gestartet werden. Die „üblichen“ Fallstricke der Aufgabenplanung (Berechtigungen, lauf ohne Anmeldung, etc) sind natürlich wie immer zu beachten.

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -File "C:\Program Files (x86)\LogPurge\LogPurge.ps1"