Jäger und Sammler

von am unter labor
3 Minuten TTR (Time To Read)

Ausgangssituation

Im Labor gab es inzwischen schon öfter das Verlangen Daten von den PCs zurück zu holen. Hierbei geht es um erhobene Datensätze aus einem Experiment. z.B. gibt es Inquisit von millisecond welches seine Daten im aktuellen WorkingDirectory ablegt. zTree (Serverseitig) legt seine daten eben falls im WD ab.

Ziel

Das Ziel ist es nun die erhobenen Datensätze von den 32 Labor PCs zentral zu sammeln, damit sie dann ausgewertet werden können.

Naive Methode

Man lauft mit einem USB Stick zu jedem PC und Kopiert die Daten runter, jedoch kann das bei 32 PCs doch nervtreibend sein.

Cooler Weg

Man führt vorne auf dem Laborleiter PC ein Script aus, welches die Daten zentral sammelt und man kopiert dann nur noch einen Ordner.

Umsetzung

Im Allgemeinen beschränken sich 90% meiner Scripte im Labor auf die Funktionalität von psexec. PSExec ist ein Tool welches das remote Ausführen von Software unter Windows erlaubt. Großer Vorteil, man muss so gut wie nichts auf dem Client einrichten (evtl hier und da mal ein paar Berechtigungen). In meinem Fall wird darüber jede Client-Software zentral gestartet, egal ob Browser oder andere Software, vereint sind diese “Tools” in einem WebUI.
Nun zum “Harvesten”, auf einem Öffentlichen Network Share liegt ein Ordner harvest. In diesem werden dann letztendlich Ordner mit dem aktuellem Zeitstempel erzeugt, welcher dann wiederum Ordner für alle Clients enthalten.

Mittels PSExec wird auf allen PCs das harvestClientside.bat Script kopiert und ausgeführt.

psexec -c -f -n 5 -d -s -i @clients.txt /accepteula -u "ADMIN" -p "ADMINPASSWD" "%~dp0\harvestClientside.bat"

Das Clientside Script hat folgenden Inhalt:

REM Wenn Kein Harvest vorhanden ist erstelle ihn einfach, für später...
if NOT EXIST C:\Users\proband\Desktop\harvest goto EOF

REM Zielordner ist einfach aktuelle Uhrzeit und PC Name
REM 17.04.2019-14_36\PCNAME
set target=P:\%data%-%time:~0,2%_%time:~3,2%\%computername%

REM zufällige Verzögerung damit nicht alle gleichzeitig ankommen
set /a sleeptime = %RANDOM% %% 10
:mount
timeout %sleeptime%

net use P: \\ZIELSERVER\lab\harvest
if errorlevel 1 goto waitformount
REM Ziel Ordner Erstellen
mkdir %target%
xcopy /F /E /Y C:\Users\proband\Desktop\harvest %target%
REM Timeout wurde benötigt, da der Client sonst die Trennung nochmal Bestätigt haben will
timeout 3
net use P: /delete
goto EOF

:waitformount
REM hin und wieder kommt es vor, dass der Server nicht mehr verbindungen haben will
REM Vor allem Bei Windows war das ein Problem
REM Mit SAMBA ist es noch nicht aufgetreten
set /a sleeptime = 3
goto mount

:EOF
REM alten harvest löschen
rmdir /S /Q C:\Users\proband\Desktop\harvest
mkdir C:\Users\proband\Desktop\harvest

Erfahrung

Die PCs kopieren die Daten sehr zuverlässig auf den Server, jedoch wurde das auch nur mit zwei leeren Dateien und einem Ordner getestet, der Traffic ist demnach nicht zu hoch gewesen. Jedoch dürften die meisten erhobenen Datensätze eh nur Excel Tabellen oä sein.

Greetings und :v: out!

windows, labor, blog