Извините, если мой вопрос тривиален; Я новичок в 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
источник
plink
. Готовы ли вы обработать первую строку$myoutput
запроса на ввод пароля? (2) Поскольку запрос пароля является частью выходных данныхplink
, вы должны ожидать, что он входит$myoutput
в консоль, а не в нее . Когда вы печатаете$myoutput=invoke-expression "$mycmd"
, вы получаете другое приглашение PS, или оно просто кажется зависшим? Если кажется, что он зависает, возможно, он молча читает пароль с клавиатуры! Попробуйте ввести пароль. (Предупреждение: оно может отображаться на экране консоли.)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Ответы:
Запрос пароля является частью выходных данных
plink
, поэтому вы должны ожидать, что он войдет в$myoutput
консоль, а не в нее . Я ожидаю, что, когда вы печатаете$myoutput=invoke-expression "$mycmd"
, он просто кажется зависшим и не дает вам другой подсказки PS. Вероятно, он молча читает пароль с клавиатуры! Если вы просто введете пароль, он будет работать. (Предупреждение: пароль может отображаться на экране консоли.)Как упомянуто выше, так как приглашение пароля является частью выходных данных
plink
, оно входит в$myoutput
. Итак, вы должны быть готовы обработать первую строку$myoutput
запроса на ввод пароля.источник