Wie streame ich ein Tar-Archiv mit Plink?

Wie streame ich ein Tar-Archiv mit Plink?

Ich möchte ein .tar-Archiv von einem Windows-Rechner mit PowerShell auf einen Linux-Rechner streamen und das Archiv aus dem Stream extrahieren. PowerShell überträgt den Archivinhalt auf stdout und plink.exe streamt den Inhalt auf stdin der empfangenden Befehlszeile.

Ich habe mir den folgenden Befehl ausgedacht.

Get-Content file.tar | & plink.exe -C -agent "remote_host" "tar xf -"

Allerdings erkennt der Tar-Befehl den Inhalt der Datei nur teilweise. Was übersehe ich oder gibt es eine bessere Lösung für das Problem?

Fehlermeldung:

tar: Skipping to next header
tar: Exiting with failure status due to previous errors

Antwort1

Offenbar handelt es sich hier um ein Kodierungsproblem. Standardmäßig gibt Get-Content den Dateiinhalt als kodierten String zurück, aber tar erwartet einen binären Datenstrom. Die Lösung wäre, die binären Daten in ein Textformat wie Base64 zu kodieren und zu dekodieren. Ich komme zu folgendem Einzeiler, weil er so furchtbar langsam ist.

[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"

Ich denke, ich werde Dateien hochladen und diese separat extrahieren.

verwandte Informationen