Как открыть бинарный канал с помощью Powershell - PullRequest
3 голосов
/ 25 февраля 2020

Насколько я читал, Powershell не может перенаправлять входные потоки. Вместо этого нужно использовать Get-Content, чтобы передать результат целевой программе. Но похоже, что это создает текстовые потоки.

Я пытался передать двоичные данные в plink:

Get-Content client.zip | & 'C:\Program Files (x86)\PuTTY\plink.exe' unix nop

Целевая система 'unix' - это Debian с фиксированной командой в authorized_keys file.

Это первые байты файла, которые я пытался передать:

00000000  50 4b 03 04 0a 00 00 00  00 00 6f 4a 59 50 c8 cb  |PK........oJYP..|

И вот что поступило в целевую систему:

00000000  50 4b 03 04 0d 0a 00 00  00 00 00 6f 4a 59 50 3f  |PK.........oJYP?|

'0a' заменяется на '0d 0a'. Я не уверен, но я предполагаю, что Get-Content делает это.

Как передать двоичные данные с помощью Powershell?

Я уже установил Powershell 6. Я уже попробовал опции -AsByteStream -ReadCount - Сырой и я получаю разные забавные результаты. Но ничто не дает мне только точную копию почтового файла. Где опция "--stop-делать-что-с-моим-файлом"?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Попробуйте:

# read binary
$bytes = [System.IO.File]::ReadAllBytes('client.zip')

# pipe all Bytes to external prg
$bytes | & 'C:\Program Files (x86)\PuTTY\plink.exe' unix nop
0 голосов
/ 25 февраля 2020

Я думаю, что получил это сам. Кажется, это делает то, что я хочу:

Start-Process 'C:\Program Files (x86)\PuTTY\plink.exe' -ArgumentList "unix nop" -RedirectStandardInput .\client.zip -NoNewWindow -Wait
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...