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
Normalerweise wird jeder Skriptbefehl von der CMD vor der Ausführung nochmals in Textform ausgegeben. Mit
@echo offunterbinden Sie diese Ausgabe.Windows verwendet auf deutschen Systemen standardmäßig die Zeichenkodierung „Codepage 1252“. Wenn Sie Umlaute oder Sonderzeichen (!, =, …) verwenden, sollten Sie zu Beginn des Skriptes mit
chcpdie Zeichenkodierung auf diese Codepage festlegen.Der Befehl
date /Tgibt das aktuelle Datum aus,time /Trespektive die aktuelle Uhrzeit.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.
Der Befehl
echogibt 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.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 Befehlpausegibt „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
Windows verwendet auf deutschen Systemen standardmäßig die Zeichenkodierung „Codepage 1252“. Wenn Sie Umlaute oder Sonderzeichen (!, =, …) verwenden, sollten Sie zu Beginn des Skriptes mit
chcpdie Zeichenkodierung auf diese Codepage festlegen.Der Befehl
dategibt das aktuelle Datum und die Uhrzeit aus.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-Processmit der Option-Waitverwendet. Mittels-PassThrukönnen wir den Prozess einer Variablen zuweisen. Über diese Variable können wir später unter anderem den Rückgabecode abfragen.Der Befehl
echogibt die nach ihm stehende Zeichenkette auf der Kommandozeile aus. Hierbei können Variablen verwendet werden.$sepatransfer.ExitCodegibt etwa den Rückgabecode des Prozesses zurück, der zur Variablen$sepatransfergehö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:
Machen Sie einen Rechtsklick auf das PowerShell-Icon.
Wählen Sie „Als Administrator ausführen“.
Führen Sie den Befehl
Set-ExecutionPolicy Unrestrictedaus.
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¶
Starten der Hauptinstanz im Hintergrund (Kommandozeile A)
C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -WaitForCommands -NoGUI
Übergabe eines Parameters (Kommandozeile B)
C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -Command Import -SEPA "sepa.xml"
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"