PowerShell:从键盘**读取**输入并将**输出**重定向到变量/文件

PowerShell:从键盘**读取**输入并将**输出**重定向到变量/文件

抱歉,我的问题很简单;我是 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"

...仍然在此状态下等待 ==> 我盲目地输入密码(密码提示在 $myoutput 中捕获)

PS C:\Users\user> $myoutput

用户@服务器的密码:

TigerVNC 服务器会话:

X 显示#进程ID

PS C:\用户\服务器>

$myoutput 变量内容正常,但是密码提示也被重定向到变量中!

我现在的 pbm 是如何使使用更加全面:用户在输入密码时无法猜测:( (即如何处理密码提示?)

备注:重定向到 $myoutput 时,plink 的详细模式(plink -v ...)仍然会输出到控制台

$myoutput=invoke-expression“$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 而不是控制台。  我估计,当你输入 时$myoutput=invoke-expression "$mycmd",它似乎只是挂起,并没有给你另一个 PS 提示。这可能是默默从键盘上读出密码!  如果您直接输入密码,它就会起作用。(警告:密码可能会显示在控制台屏幕上。)

如上所述,由于密码提示是 输出的一部分plink,因此它会进入$myoutput。因此,您需要准备好处理 的第一行$myoutput密码提示。

相关内容