Я хочу передать архив.tar с компьютера Windows с помощью PowerShell на компьютер Linux и извлечь архив из потока. PowerShell отправляет содержимое архива на стандартный вывод, а содержимое потока plink.exe — на стандартный ввод командной строки.
Я придумал следующую команду.
Get-Content file.tar | & plink.exe -C -agent "remote_host" "tar xf -"
Однако команда tar распознает содержимое файла лишь частично. Что мне не хватает или есть лучшее решение проблемы?
Сообщение об ошибке:
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
Судя по всему, это проблема с кодировкой. По умолчанию Get-Content возвращает содержимое файла в виде закодированной строки, но tar ожидает двоичный поток. Решением будет кодирование двоичных данных в текстовый формат, такой как Base64, и их декодирование. Я подхожу к следующей строчке из-за ее ужасной медленности.
[System.Convert]::ToBase64String((Get-Content -AsByteStream file.tar)) | plink.exe -C -agent "remote_host" "base64 -di | tar xvf -"
Думаю, я загружу файлы и извлеку их отдельно.