PowerShell: ** чтение ** ввода с клавиатуры И ** перенаправление вывода ** в переменную / файл

0

Извините, если мой вопрос тривиален; Я новичок в PowerShell.

Моя программа (plink) ожидает ответа от клавиатуры и выдаст некоторый вывод. Можно ли перенаправить вывод в переменную / файл ?

Подробности:

(Я назначаю саму команду переменной для удобства.)

Без перенаправления вывода - Вывод на консоль в порядке:

PS C:\Users\user> $mycmd="plink -v -ssh -l $user $myserver vncserver -list"
PS C:\Users\user> invoke-expression $mycmd
user@server's password:
TigerVNC server sessions:
X DISPLAY #     PROCESS ID
:1              26788
PS C:\Users\user>

Однако с перенаправлением вывода в переменную:

PS C:\Users\user> $myoutput=invoke-expression "$mycmd"

... все еще жду в этом состоянии ==> Я набираю свой passwd вслепую (приглашение passwd записывается в $ myoutput)

PS C: \ Users \ user> $ myoutput

пароль пользователя @ сервера:

Сеансы TigerVNC-сервера:

X DISPLAY # ID ПРОЦЕССА

PS C: \ Users \ сервер>

$ myoutput с содержимым переменной в порядке, но подсказка пароля также перенаправляется в переменную!

Мой pbm теперь состоит в том, как сделать использование всеобъемлющим: пользователь не может догадаться, когда набирает свой пароль :( (то есть, как обрабатывать запрос пароля?)

Замечания : подробный режим plink (plink -v ...) все еще выводится на консоль при перенаправлении на $ myoutput

$ myoutput = invoke-выражение "$ mycmd"

Looking up host "server"
Connecting to xxx.XXX.XXX.XXX port 22
We claim version: SSH-2.0-PuTTY_Release_0.66
Server version: SSH-2.0-OpenSSH_7.4
Using SSH protocol version 2
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Host key fingerprint is:
ssh-rsa 2048 blabklablablablabla
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA-256 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA-256 server->client MAC algorithm
Using username "user".
Using SSPI from SECUR32.DLL
Attempting GSSAPI authentication
GSSAPI authentication initialisation failed
The target was not recognized.

Я ввожу свой пароль здесь (в темноте)

Sent password
Access granted
Opening session as main channel
Opened main channel
Started a shell/command
Server sent command exit status 1
Disconnected: All channels closed
Свободный человек
источник
(1) Прежде всего, вы должны знать, что запрос пароля является частью вывода plink. Готовы ли вы обработать первую строку $myoutputзапроса на ввод пароля? (2) Поскольку запрос пароля является частью выходных данных plink, вы должны ожидать, что он входит $myoutput в консоль, а не в нее .   Когда вы печатаете $myoutput=invoke-expression "$mycmd", вы получаете другое приглашение PS, или оно просто кажется зависшим? Если кажется, что он зависает, возможно, он молча читает пароль с клавиатуры!  Попробуйте ввести пароль. (Предупреждение: оно может отображаться на экране консоли.)
G-Man
Я переписал свое руководство в качестве ответа.
G-Man
Спасибо G-Man, хороший намек! Действительно, он не зависает, он ждет :) PS C:\Users\user> $myoutput=invoke-expression "$mycmd" ..... все еще ждет в этом состоянии ==> Я набираю passwd вслепую (подсказка passwd записана в $ myoutput) PS C:\Users\user> $myoutput _user@server's password:_ TigerVNC server sessions: X DISPLAY # PROCESS ID PS C:\Users\server $ myoutput с содержимым в порядке. Но мой pbm теперь - как сделать использование более freindly: пользователь не может догадаться, когда набирает свой пароль :( Замечания: подробный режим plink (plink -v), по-прежнему выводимый на консоль при перенаправлении на $ myoutput
Free Man

Ответы:

0

Запрос пароля является частью выходных данных plink, поэтому вы должны ожидать, что он войдет в $myoutput консоль, а не в нее .   Я ожидаю, что, когда вы печатаете $myoutput=invoke-expression "$mycmd", он просто кажется зависшим и не дает вам другой подсказки PS. Вероятно, он молча читает пароль с клавиатуры!   Если вы просто введете пароль, он будет работать. (Предупреждение: пароль может отображаться на экране консоли.)

Как упомянуто выше, так как приглашение пароля является частью выходных данных plink, оно входит в $myoutput. Итак, вы должны быть готовы обработать первую строку $myoutputзапроса на ввод пароля.

G-Man
источник
Точно, это вопрос сейчас: как обработать эту первую строку $ myoutput, чтобы отобразить подсказку пароля ... Большое спасибо G-man, вы делаете мой вопрос прогрессирующим
Free Man