Извините, если мой вопрос тривиален; Я новичок в 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 ответ1

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .