Automatisierung durch Skripte

Kommandozeilen-Skripte sind kleine Programme, welche durch eine Aneinanderreihung von Kommandozeilen-Aufrufen Arbeitsabläufe automatisieren können. Unter Microsoft Windows stehen hierzu zwei Systeme zur Verfügung.

  • Die CMD (im Start-Menü als „Eingabeaufforderung“ bezeichnet) existiert seit MS-DOS-Zeiten. Die mit ihr erstellten Skripte tragen die Dateiendung .bat (Batch) und finden sich in vielen Bestandssystemen wieder.

  • Die PowerShell wurde von Grund auf neu entwickelt. Sie erlaubt wenn nötig deutlich komplexere und modernere Skripte und ist nicht zur CMD kompatibel. Die mit ihr erstellten Skripte tragen die Dateiendung .ps1 (PowerShell).

SEPA-Transfer erlaubt die Bedienung sowohl in der CMD- als auch in der PowerShell-Notation und fügt sich somit nahtlos in beide Umfelder ein.

Allgemein

Programme geben in der Regel einen Rückgabewert zurück, nachdem sie aufgerufen wurden. Dies ist eine Zahl, die nach dem Programmlauf ausgewertet werden kann. Für die SEPA-Übertragung werden diese im Kapitel Return Codes erläutert. Generell gilt folgendes: Ist der Rückgabecode ungleich 0, ist ein Fehler aufgetreten.

CMD

Im folgenden soll eine kurze Einführung in die Batch-Programmierung anhand eines kurzen Beispielskriptes gegeben werden.

Das folgende Skript könnte beispielsweise in einer Datei „Mein Import.bat“ geschrieben sein:

@echo off
chcp 1252
date /T
time /T
"C:\Program Files (x86)\JAM Software\SEPA-Transfer\SEPA-Transfer.exe" -COMMAND import -SEPA "C:\SEPA files\sepa.xml"
echo The return code during import was %ERRORLEVEL%
pause
  1. Normalerweise wird jeder Skriptbefehl von der CMD vor der Ausführung nochmals in Textform ausgegeben. Mit @echo off unterbinden Sie diese Ausgabe.

  2. Windows verwendet auf deutschen Systemen standardmäßig die Zeichenkodierung „Codepage 1252“. Wenn Sie Umlaute oder Sonderzeichen (!, =, …) verwenden, sollten Sie zu Beginn des Skriptes mit chcp die Zeichenkodierung auf diese Codepage festlegen.

  3. Der Befehl date /T gibt das aktuelle Datum aus, time /T respektive die aktuelle Uhrzeit.

  4. Installierte Programme, wie z. B. SEPA-Transfer können Sie über den vollständigen Programmpfad aufrufen. Viele Programme erlauben das Ausführen von Funktionalität über Parameter, welche Sie nach dem Programmpfad notieren. Für die Bedienung von SEPA-Transfer sehen Sie das Kapitel Kommandozeilensteuerung.

  5. Der Befehl echo gibt die nach ihm stehende Zeichenkette auf der Kommandozeile aus. Hierbei können Variablen verwendet werden. %ERRORLEVEL% gibt etwa den Rückgabecode des zuletzt ausgeführten Programms aus.

  6. Wenn Sie eine Batch-Datei ausführen, indem Sie etwa doppelt darauf klicken, so wird sich ein CMD-Fenster öffnen. Weiterhin wird sich dieses nach Ausführen aller Befehle wieder schließen. Nach Ausgabe des echo-Textes würde sich die CMD also schließen, ohne dass Sie Zeit haben, den Text auch zu lesen. Der Befehl pause gibt „Drücken Sie eine beliebige Taste …“ aus und wartet auf das Drücken einer Taste, bevor der Ablauf (also auch das Ende des Skripts) fortgesetzt wird.

PowerShell

Im folgenden soll eine kurze Einführung in die PowerShell-Programmierung anhand eines kurzen Beispielskriptes gegeben werden.

Das folgende Skript könnte beispielsweise in einer Datei „Mein Import.ps1“ geschrieben sein:

chcp 1252
date
$sepatransfer = (Start-Process -FilePath "C:\Program Files (x86)\JAM Software\SEPA-Transfer\SEPA-Transfer.exe" -ArgumentList "-Command Import -SEPA "C:\SEPA Files\sepa.xml"" -PassThru -Wait)
echo The return code for the import was $sepatransfer.ExitCode
  1. Windows verwendet auf deutschen Systemen standardmäßig die Zeichenkodierung „Codepage 1252“. Wenn Sie Umlaute oder Sonderzeichen (!, =, …) verwenden, sollten Sie zu Beginn des Skriptes mit chcp die Zeichenkodierung auf diese Codepage festlegen.

  2. Der Befehl date gibt das aktuelle Datum und die Uhrzeit aus.

  3. Installierte Programme, wie z. B. SEPA-Transfer können Sie über den vollständigen Programmpfad aufrufen. Viele Programme erlauben das Ausführen von Funktionalität über Parameter, welche Sie nach dem Programmpfad notieren. Für die Bedienung von SEPA-Transfer sehen Sie das Kapitel Kommandozeilensteuerung. Die PowerShell führt ein Skript in der Regel weiter aus, auch wenn das Programm noch läuft. Um auf ein Programm zu warten, wird Start-Process mit der Option -Wait verwendet. Mittels -PassThru können wir den Prozess einer Variablen zuweisen. Über diese Variable können wir später unter anderem den Rückgabecode abfragen.

  4. Der Befehl echo gibt die nach ihm stehende Zeichenkette auf der Kommandozeile aus. Hierbei können Variablen verwendet werden. $sepatransfer.ExitCode gibt etwa den Rückgabecode des Prozesses zurück, der zur Variablen $sepatransfer gehört.

Bemerkung

Hinweis: Um das Ausführen von möglicherweise bösartigen PowerShell-Skripten zu verhindern, sind nicht Hersteller-zertifizierte (also auch selbst erstellte) Skripte in Windows standardmäßig deaktiviert.

Dies können Sie wie folgt ändern:

  1. Machen Sie einen Rechtsklick auf das PowerShell-Icon.

  2. Wählen Sie „Als Administrator ausführen“.

  3. Führen Sie den Befehl Set-ExecutionPolicy Unrestricted aus.

Kommandozeilenausgabe in eine Datei schreiben

Neben der Möglichkeit, den Ausgabetext (z. B. mit echo) auf der Kommandozeile anzuzeigen, ist es auch möglich, die Ausgabe eines Befehls in eine Datei zu schreiben. Diese Option gilt sowohl für CMD als auch für PowerShell. Dabei überschreibt „>“ eine Datei, „>>“ hängt die Ausgabe an eine angegebene Datei an. Wenn keine Datei existiert, wird sie in beiden Fällen erstellt (vorausgesetzt, Sie haben die Berechtigung dazu).

chcp 1252
date > "C:\Users\Tom Baker\Desktop\Output.txt"
$sepatransfer = (Start-Process -FilePath "C:\Program Files (x86)\JAM Software\SEPA-Transfer\SEPA-Transfer.exe" -ArgumentList "-Command Import -SEPA "C:\SEPA Files\sepa.xml"" -PassThru -Wait)
echo The return code for the import was $sepatransfer.ExitCode >> "C:\Users\Tom Baker\Desktop\Output.txt"

Das Beispiel überschreibt oder erzeugt eine Datei „Ausgabe.txt“ auf dem Desktop und schreibt die aktuelle Zeit in diese. Nach der Ausführung von SEPA-Transfer wird noch der Rückgabecode an die Datei angehängt. Die Ausgabe.txt-Datei könnte dann etwa folgenden Inhalt haben:

Fri May 23 13:37:00 Central European Summer Time 2014
The return code during import was 0

Verarbeitung mehrerer Kommandozeilenbefehle

Wenn eine größere Anzahl von Kommandozeilenbefehlen verarbeitet werden soll, ist es möglich, SEPA Transfer mit der Option -WaitForCommands zu starten. Diese Option startet SEPA-Transfer. Nach dem Aufruf von SEPA-Transfer mit dem Parameter -WaitForCommands kann die so gestartete Instanz von SEPA-Transfer weitere Befehle annehmen, indem sie SEPA-Transfer mit zusätzlichen Parametern aufruft. Diese Befehle werden sofort ausgeführt, wenn keine Dialoge angezeigt werden (siehe Hinweis).

Der Parameter -Stop kann verwendet werden, um die mit -WaitForCommands begonnene Instanz von SEPA Transfer zu beenden.

Der Parameter -Kill kann verwendet werden, um die mit -WaitForCommands gestartete Instanz von SEPA Transfer zu beenden, ohne anstehende Befehle zu bearbeiten.

Beispiel

  1. Starten der Hauptinstanz im Hintergrund (Kommandozeile A)

C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -WaitForCommands -NoGUI
  1. Übergabe eines Parameters (Kommandozeile B)

C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -Command Import -SEPA "sepa.xml"
  1. Beenden der Hauptinstanz der Befehle (Kommandozeile B)

C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -Stop

Hinweis: Wenn dieser Befehl ohne den globalen Schalter „NOGUI“ verwendet wird, startet die grafische Benutzeroberfläche wie gewohnt. Kommandozeilenbefehle einer anderen Instanz können nur bearbeitet werden, solange keine Dialoge geöffnet sind (z.B. Einstellungen, Import/Export-Dialog, etc.). Solange ein Dialog angezeigt wird, werden die anstehenden Befehle gesammelt und erst nach dem Schließen des Dialogs ausgeführt.

Windows Scripting Host

Möchten Sie Windows Scripting Host (WSH) in SEPA-Transfer verwenden, könnte ein Befehl für den Import folgendermaßen aussehen:

Set Shell = CreateObject("WScript.Shell")
Shell.Run """C:\Program Files (x86)\JAM Software\SEPA-Transfer.exe"" -Command Import -File ""C:\Path\zur\EXCEL.xlsx"" -Command Write -SEPA ""C:\Path\zur\converted\SEPA.xml"" -Type Transfer"