Automatisierung durch Skripte

<< Zum Inhaltsverzeichnis >>

Navigation:  Kommandozeile >

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

Üblicherweise geben Programme nach deren Aufruf einen Rückgabecode zurück. Dies ist eine Zahl, die nach dem Programmlauf ausgewertet werden kann. Für SEPA-Transfer sind diese im Kapitel Rückgabecodes erklärt. Generell gilt: Ist der Rückgabecode ungleich 0, so 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 Dateien\sepa.xml"

echo Der Rückgabecode beim Import war %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 die 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 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 das 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 Dateien\sepa.xml"" -PassThru -Wait)

echo Der Rückgabecode beim Import war $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 die 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 wird 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.

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 Option, sich ausgegebenen Text (z. B. durch echo) auf der Kommandozeile anzeigen zu lassen existiert auch die Möglichkeit, die Ausgabe eines Befehls in eine Datei zu schreiben. Diese Möglichkeit gilt sowohl für CMD, als auch für PowerShell. Dabei überschreibt ">" eine Datei, ">>" hängt die Ausgabe an eine gegebene Datei an. Existiert keine Datei, wird diese in beiden Fällen erzeugt (sofern Sie die Berechtigung dazu haben).

 

chcp 1252

date > "C:\Users\Tom Baker\Desktop\Ausgabe.txt"

$sepatransfer = (Start-Process -FilePath "C:\Program Files (x86)\JAM Software\SEPA-Transfer\SEPA-Transfer.exe" -ArgumentList "-Command Import -SEPA "C:\SEPA Dateien\sepa.xml"" -PassThru -Wait)

echo Der Rückgabecode beim Import war $sepatransfer.ExitCode >> "C:\Users\Tom Baker\Desktop\Ausgabe.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 Mitteleuropäische Sommerzeit 2014

Der Rückgabecode beim Import war 0

Verarbeitung mehrerer Kommandozeilenbefehle

Soll eine größere Anzahl an Kommandozeilenbefehlen abgearbeitet werden, 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 andere Befehle entgegennehmen, indem SEPA-Transfer mit weiteren Parametern aufgerufen wird. Diese Befehle werden unmittelbar ausgeführt, sofern keine Dialoge angezeigt werden (siehe Hinweis).

 

Mit dem Parameter -Stop kann die mit -WaitForCommands gestartete Instanz von SEPA-Transfer beendet werden.

Mit dem Parameter -Kill kann die mit -WaitForCommands gestartete Instanz von SEPA-Transfer beendet werden, ohne dass ausstehende Befehle bearbeitet werden.

 

Beispiel:

1.Starten der Hauptinstanz im Hintegrund (Kommandozeile A)

C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -WaitForCommands -NoGUI

2.Übergabe eines Parameters (Kommandozeile B)

C:\...\SEPA-Transfer\Bin>SEPATransfer.exe -Command Import -SEPA "sepa.xml"

3.Beenden der Hauptinstanz der Befehle (Kommandozeile B)

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

 

Hinweis: Wird dieser Befehl ohne den globalen Schalter "NOGUI" verwendet startet die grafische Oberflä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 ausstehenden Kommandos gesammelt und erst nach 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:\Pfad\zur\EXCEL.xlsx"" -Command Write -SEPA ""C:\Pfad\zur\konvertierten\SEPA.xml"" -Type Transfer"