Mit WinSCP ist es ein leichtes Daten auszutauschen. Neben der einfachen Bedienung über die grafische Benutzeroberfläche ist vor allem die Möglichkeit mittels Skript Vorgänge zu automatisieren eine große Arbeitserleichterung.

Allerdings ist der Weg zu einem funktionierenden Skript nicht immer ganz einfach, da einem beispielsweise Sonderzeichen in Benutzernamen, Kennwörtern oder Pfaden die Sache schwer machen können, ebenso die genaue Reihenfolge von Befehlen und mehr.

Um schneller ans Ziel zu gelangen bietet es sich an, die eine oder andere Hilfestellung von WinSCP zu nutzen. Dieser Beitrag basiert auf der Aufgabe einen lokalen Ordner via WebDAV mit einem Ordner in einer ownCloud abzugleichen.

Um WinSCP mit einem Skript zu starten und die Ausgaben in Protokollen zu erfassen sieht der Aufruf wie folgt aus:

C:\WinSCP\WinSCP.com /script=script.txt /log=winscp.log > winscp-console.log

Die Konsolenausgabe kann interessant sein, da sie leichter zu lesen ist als das eigentliche Log, daher wird sie in diesem Fall ebenfalls erfasst.

Um relativ leicht ein Skript oder zumindest ein Grundgerüst erstellen zu können sind folgende Menüpunkte interessant:

Entweder aus dem Session/Connection Manager heraus oder nachdem eine Verbindung aufgebaut wurde nach einem Rechtsklick auf die Verbindung bzw. den Tab oder aus dem Menü “Tabs” “Generate session URL/code” anklicken. Auf der Registerkarte “Script” bekommt man so bereits ein Grundgerüst wie schon mal die Verbindung aufgebaut werden kann angezeigt:

open davs://<Benutzername>:<Kennwort>@<FQDN-oder-IP>/

# Your command 1
# Your command 2

exit

# Execute the script using a command like:
# "C:\WinSCP\WinSCP.exe" /log="C:\writable\path\to\log\WinSCP.log" /ini=nul /script="C:\path\to\script\script.txt"

Das wäre schonmal ein Anfang, allerdings funktioniert dies so leider nur in der GUI, versucht mit das Skript nun auszuführen erhält man ein

405 Method not allowed

Abhilfe schafft in diesem Beispiel, den “open”-Befehl wie folgt zu gestalten:

open davs://<Benutzername>:<Kennwort>@<FQDN-oder-IP>/remote.php/webdav/

Möchte man im weiteren Verlauf erfahren wie man lokal wie remote in die richtigen Verzeichnisse wechselt um anschließend weitere Aktionen ausführen zu können, bietet sich an ein-zwei Dateien für den Download auszuwählen, mit der rechten Maustaste anzuklicken und “Download” auszuwählen. In dem daraufhin erscheinenden Dialog kann man nach einem Klick auf den Pfeil nach unten bei “Transfer settings…” auf “Generate Transfer Code” klicken. So erhält man bereits ein gutes Skript:

open davs://<Benutzername>:<Kennwort>@<FQDN-oder-IP>/remote.php/webdav/

cd "<Lokaler Ordner>"
lcd "<Remote-Ordner>"

get *

exit

# Execute the script using a command like:
# "C:\WinSCP\WinSCP.exe" /log="C:\writable\path\to\log\WinSCP.log" /ini=nul /script="C:\path\to\script\script.txt"

Wie man sieht wurde hier bereits die erste Zeile angepasst. Statt “get *” für den Download kann man beispielsweise eine Synchronisation einrichten:

synchronize local -resumesupport=on -delete

Quellen

WinSCP – Documentation – Using WinSCP – Generate Session URL/Code/Transfer Code Dialog

WinSCP – Documentation – Using WinSCP – Transfer Options Dialog