Gostaria de transmitir um arquivo .tar de uma máquina Windows usando PowerShell para uma máquina Linux e extrair o arquivo do fluxo. O PowerShell envia o conteúdo do arquivo para stdout e o conteúdo do stream plink.exe para receber o stdin da linha de comando.
Eu criei o seguinte comando.
Get-Content file.tar | & plink.exe -C -agent "remote_host" "tar xf -"
No entanto, o comando tar reconhece o conteúdo do arquivo apenas parcialmente. O que estou perdendo ou existe uma solução melhor para o problema?
Mensagem de erro:
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Responder1
Aparentemente, este é um problema de codificação. Por padrão, Get-Content retorna o conteúdo do arquivo como uma string codificada, mas tar espera um fluxo binário. A solução seria codificar os dados binários para um formato de texto como Base64 e decodificá-los. Chego à seguinte frase por sua terrível lentidão.
[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"
Acho que vou fazer upload de arquivos e extraí-los separadamente.