Immer wieder müssen wir eine größere Menge Log-Daten von z/OS auf Windows-Rechner herunterladen — meist weil eine umfangreiche Analyse auf dem Laptop einfacher umgesetzt werden kann als auf z/OS. Stunden laufende Scripte kosten unter z/OS MIPS, unter Windows nur Strom und Nerven.

Natürlich haben wir uns — wie alle Informatiker — gewünscht, man könnte diesen wiederkehrenden Task automatisieren. Aber ohne Admin-Rechte auf dem Windows-Rechner oder gar eine leistungsfähige Shell (wie eine Bash, auch die Windows Powershell wäre ok gewesen) muss man kreativ werden. WinSCP gibt es auch in einer Portable Variante, aber dass man WinSCP auch einfach “scripten” kann, war mir neu. So geht’s:

Eine Verbindungs-Session in der WinSCP-GUI konfigurieren:

  • WinSCP.exe öffnen
  • Connections anlegen zu allen LPARs, von denen Logs gezogen werden sollen.
  • Connection Namen müssen konsistent und einfach gehalten sein (am besten nennen wie die LPAR).

Das sollte dann so aussehen wie in dem Screenshot. Man kann selbstverständlich auch FTP statt SCP nutzen.

Ein WinSCP-Scipts ist in einer sehr einfachen Sprache gehalten. Hier ein Beispiel:

download.scipt Inhalt:

open %1%
option batch continue
cd /path/to/logs
get -filemask="error.log.d* | *.gz; */ffdc/" -transfer=ascii -neweronly * c:\work\logs\%1%\
exit

Die filemask sollte natürlich genau die Files beschreiben, die man herunterladen will. Syntax innerhalb der Anführungsstriche:
Vor dem | alle Includes, hinter dem | alle Excludes.

Die batch und continue Optionen ermöglichen WinSCP, sich automatisch zu reconnecten wenn man disconnected wird und bei einem Fehler (wie permission denied) den Gesamtvorgang nicht abzubrechen, sondern einfach mit dem nächsten Element weiter zu machen.

Der Platzhalter %1% wird beim Aufruf mittels des Schalters /parameter mit dem Namen der Connection für die jeweilige LPAR gefüllt. Gleichzeitig nutzen wir ihn für einen Verzeichnisnamen. Deshalb sollte der Name der Connection kurz und lesbar sein.

In Kommandozeile aufgerufen wird dann einfach

WinSCP.com /script=download.script /parameter <LPAR-NAME>

VORSICHT: Falls man zwischendurch auch WinSCP.exe nutzt, sollte man darauf achten, sowohl remote als auch lokal bei Verlassen der Session in einem Verzeichnis zu sein, das beim nächsten script-Aufruf noch existiert, bevor man sich mit WinSCP.exe wieder auslogt.

Das Verzeichnis wird für nichts genutzt, aber als “last used” im Profil gespeichert und bringt das Script zum Abbruch mit Fehler, wenn es nicht mehr existiert.