TransferX – Console CLI

Basis Dokumente: Read Me, Architektur

Die TransferX.Console ist die Skript- und Automatisierungsoberfläche für DevOps- und Batch-Szenarien.
Sie unterstützt zwei Modi:

Modus Beschreibung
Interaktiv Start ohne Argumente → geführtes Menü
CLI Start mit Argumenten → direkter Command-Aufruf, Exit-Code 0 = OK / 1 = Fehler

Verwendung

CLI shell

transferx> <command> [Optionen]
transferx> --help
transferx> <command> --help

PowerShell

# Im aktuellen Verzeichnis
.\TransferX.Console.exe --help
.\TransferX.Console.exe provider-list
.\TransferX.Console.exe transfer-run --name MeinTransfer

Command

:: In einer .bat-Datei (cmd.exe)
TransferX.Console.exe --help
TransferX.Console.exe provider-list

Ablauf – Beispiel FTP → Lokal kopieren

flowchart LR
    A["1. provider-register\n&quot;FTP-Quelle&quot;"] --> B["2. provider-register\n&quot;Lokales Ziel&quot;"]
    B --> C["3. transfer-start\n--op Copy"]
    C --> D["4. transfer-status\n--id &lt;Guid&gt;"]
    D --> E["5. transfer-progress\n--id &lt;Guid&gt;"]

Provider-Commands

Verwalten registrierte Provider (FTP, WebDAV, LocalFile usw.).

Command Beschreibung
provider-list Alle registrierten Provider auflisten
provider-register Neuen Provider registrieren
provider-update Provider-Konfiguration aktualisieren
provider-delete Provider löschen
provider-test Verbindung zum Provider testen
provider-details Detailansicht eines Providers
provider-browse Verzeichnis eines Providers durchsuchen
plugin-list Verfügbare Provider-Plugins auflisten

provider-list

transferx provider-list

provider-register

transferx provider-register --name <Name> --type <Typ> --path <Pfad> [--user <User>] [--password <Pw>]
Option Pflicht Beschreibung
--name Anzeigename des Providers
--type Plugin-Typ: LocalFile, Ftp, WebDav
--path Basis-Pfad / URL (z. B. ftp://server)
--user Benutzername (optional)
--password Passwort (optional)

Beispiel:

transferx provider-register --name MeinFTP --type Ftp --path ftp://meinserver.ch --user admin --password geheim
# → Provider erfolgreich registriert. ID: 3f2504e0-4f89-11d3-9a0c-0305e82c3301

provider-update

transferx provider-update --id <Guid> --path <Pfad> [--user <User>] [--password <Pw>]

provider-delete

transferx provider-delete --id <Guid>

provider-test

transferx provider-test --id <Guid>

provider-details

transferx provider-details --id <Guid>

provider-browse

transferx provider-browse --id <Guid> --path <Pfad>

plugin-list

transferx plugin-list

Transfer-Commands

Steuern laufende und gespeicherte Transfers.

Command Beschreibung
transfer-start Neuen Transfer starten
transfer-list Alle Transfers auflisten
transfer-status Status eines Transfers abfragen
transfer-progress Fortschritt eines laufenden Transfers abfragen
transfer-cancel Transfer abbrechen

transfer-start

transferx transfer-start --src <Guid> --src-path <Pfad> --dst <Guid> --dst-path <Pfad> --op <Operation> [--wait]
Option Pflicht Beschreibung
--src ID des Quell-Providers (Guid)
--src-path Quellpfad beim Quell-Provider
--dst ID des Ziel-Providers (Guid)
--dst-path Zielpfad beim Ziel-Provider
--op Operation: Copy | Sync | SyncPreview
--wait Wartet synchron auf Abschluss (Completed, Failed oder Cancelled). Poll-Intervall: 2000 ms

Verhalten --wait – Ablauf:

  • Ohne --wait: Transfer startet im Hintergrund (Fire-and-Forget), die Transfer-ID wird sofort ausgegeben.
  • Mit --wait: Blockiert die Console bis der Transfer Completed, Failed oder Cancelled ist. Fortschritt (Dateiname, Prozent) wird laufend ausgegeben.
sequenceDiagram
    participant PS as PowerShell
    participant CLI as config-start --wait
    participant H as StartTransferHandler
    participant L as ListTransferConfigsHandler 
    participant S as GetTransferStatusHandler

    PS->>CLI: config-start --id --wait
    CLI->>L: HandleAsync(ListTransferConfigsQuery)
    L-->>CLI: TransferConfigDto
    CLI->>H: HandleAsync(StartTransferCommand)
    H-->>CLI: transferId (sofort)
    Note over CLI: Poll-Schleife, Intervall 2000 ms
    loop bis Completed / Failed / Cancelled
        CLI->>S: GetTransferStatusQuery(transferId)
        S-->>CLI: TransferStatus
    end
    CLI-->>PS: Exit-Code 0 / 1

Beispiel:

transferx transfer-start 
    --src 3f2504e0-4f89-11d3-9a0c-0305e82c3301 
    --src-path /daten 
    --dst a1b2c3d4-0000-0000-0000-000000000001 
    --dst-path /backup ` 
    --op Copy --wait

→  [OK]  Transfer erfolgreich gestartet.
→  [i]   Transfer-ID: 7c9e6679-7425-40de-944b-e07fc1f90ae7
→  [i]   Warte auf Abschluss (--wait) ...
→        ... /daten/datei.txt  42 %
→  [i]   Status: Running ...
→  [OK]  Transfer abgeschlossen. (2026-03-20 08:15:00)

transfer-list

transferx transfer-list

transfer-status

transferx transfer-status --id <Guid>

transfer-progress

transferx transfer-progress --id <Guid>

transfer-cancel

transferx transfer-cancel --id <Guid>

Transfer-Konfigurations-Commands

Gespeicherte Transfer-Konfigurationen für Wiederverwendung und Automatisierung.

Command Beschreibung
config-save Neue Transfer-Konfiguration speichern
config-rename Konfiguration umbenennen
config-delete Konfiguration löschen
config-list Alle Konfigurationen auflisten
config-start Transfer direkt aus Konfiguration starten

config-save

transferx config-save --name <Name> --src <Guid> --src-path <Pfad> --dst <Guid> --dst-path <Pfad> --op <Operation>
Option Pflicht Beschreibung
--name Anzeigename der Konfiguration
--src ID des Quell-Providers (Guid)
--src-path Quellpfad
--dst ID des Ziel-Providers (Guid)
--dst-path Zielpfad
--op Operation: Copy | Sync | SyncPreview

Beispiel:

transferx config-save --name DailyBackup \
  --src 3f2504e0-4f89-11d3-9a0c-0305e82c3301 --src-path /daten \
  --dst a1b2c3d4-0000-0000-0000-000000000001 --dst-path /backup \
  --op Copy
# → Transfer-Konfiguration erfolgreich gespeichert. ID: b5c6d7e8-...

config-rename

transferx config-rename --id <Guid> --name <NeuerName>

config-delete

transferx config-delete --id <Guid>

config-list

transferx config-list

config-start

transferx config-start --id <Guid> [--wait]
Option Pflicht Beschreibung
--id ID der Transfer-Konfiguration (Guid)
--wait Wartet synchron auf Abschluss (Completed, Failed oder Cancelled). Poll-Intervall: 2000 ms

Beispiel – tägliches Backup per Skript:

transferx config-start --id b5c6d7e8-0000-0000-0000-000000000042 --wait
[i]  Starte Transfer 'NachtBackup' (Copy) ...
[i]  Quelle: [3f2504e0-...] /export
[i]  Ziel:   [a1b2c3d4-...] /backup

[OK] Transfer erfolgreich gestartet.
[i]  Transfer-ID: b5c6d7e8-0000-0000-0000-000000000042
[i]  Warte auf Abschluss (--wait) ...

... /export/datei.txt  75 %
[i]  Status: Running ...

[OK] Transfer abgeschlossen. (2026-03-20 02:00:00)

Transfer-Operationen

Operation Beschreibung
Copy Kopiert alle Dateien von Quelle nach Ziel (kein Löschen)
Sync Synchronisiert Quelle ↔ Ziel (inkl. Löschen veralteter Dateien)
SyncPreview Vorschau der Sync-Änderungen, ohne Dateien zu verändern

Vollständiges Beispiel – Backup FTP → Lokal

# 1. FTP-Provider registrieren
transferx provider-register --name FTP-Prod --type Ftp --path ftp://backup.sowi.ch --user ftpuser --password geheim

# 2. Lokales Ziel registrieren
transferx provider-register --name Lokal-Backup --type LocalFile --path C:\Backups

# 3. Alle Provider prüfen
transferx provider-list

# 4. Konfiguration speichern (für wiederkehrende Ausführung)
transferx config-save --name NachtBackup \
  --src <FTP-Provider-ID> --src-path /export \
  --dst <Lokal-Provider-ID> --dst-path C:\Backups\export \
  --op Copy

# 5. Transfer starten und auf Abschluss warten
transferx config-start --id <Konfig-ID> --wait

# 6. Oder: Transfer im Hintergrund starten und Status manuell überwachen
transferx config-start --id <Konfig-ID>

# 7. Status überwachen
transferx transfer-status --id <Transfer-ID>
transferx transfer-progress --id <Transfer-ID>

Prozess-Lifecycle und Stale-Transfer-Bereinigung

Verhalten beim Start

Beim Start prüft die Console automatisch alle gespeicherten Transfers mit Status Running. Transfers, deren besitzender Prozess (OwnerProcessId) nicht mehr aktiv ist, werden auf Cancelled gesetzt.

Transfers anderer, noch laufender Prozessinstanzen werden nicht verändert – parallele Batch-Ausführungen sind sicher.

Verhalten beim Beenden

Beim Beenden (normal, CTRL+C, IDE-Stop oder Prozess-Kill) werden ausschliesslich die eigenen laufenden Transfers auf Cancelled gesetzt.

Szenario Verhalten
Normales Beenden ([0] im Menü) Eigene Running-Transfers → Cancelled
CTRL+C / CTRL+BREAK Eigene Running-Transfers → Cancelled, danach sauberer Exit
IDE-Stop / Prozess-Kill Eigene Running-Transfers → Cancelled via ProcessExit-Handler
Parallele Instanz beendet sich Fremde Running-Transfers bleiben unverändert

Parallele Ausführung

Mehrere Instanzen der Console können gleichzeitig betrieben werden (z.B. zwei PowerShell-Batches). Jeder Transfer trägt die PID des startenden Prozesses (OwnerProcessId). Cleanup-Operationen wirken immer nur auf eigene oder nachweislich verwaiste Transfers.