在远程Powershell会话中执行交互式命令不起作用

时间:2014-01-30 20:01:55

标签: windows powershell remote-access

我在远程PowerShell会话中执行需要用户交互的命令时遇到麻烦。

示例:我输入了一个远程会话

Enter-PSSession -ComputerName mobius

在此会话中,我执行一个要求输入密码的命令:

[mobius]: PS C:\Windows\system32> & 'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe

joe@merlin's password:
c:\Program Files (x86)\Putty\plink.exe : Using username "plakat".
    + CategoryInfo          : NotSpecified: (Using username "plakat".:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

最后两行显示为红色。似乎有两个问题。

问题1: plink.exe将文本'using username“plakat”'写入stderr。这可能会导致错误消息。我可以以某种方式压制这个吗? (管道stderr到stdout或其他东西。)

问题2:此过程退出我应输入密码的位置。我也可以使用其他命令重现它,如

[mobius]: PS C:\Windows\system32> cmd /c date

它不允许我输入日期。如果我在本地PowerShell中运行它们,则这两个命令都有效。在这种情况下,问题1或2都没有出现。

2 个答案:

答案 0 :(得分:1)

远程PowerShell会话不支持交互式本机Windows控制台命令。我知道这听起来很愚蠢,但目前情况就是这样(从PowerShell v4.0开始)。

大多数命令行实用程序都支持某种形式的自动化,无论是管道还是将值作为参数传递,请仔细查看您正在使用的工具。当然,这是根据具体情况而定。没有简单的方法可以以任何通用的方式拦截远程端的交互式提示。

答案 1 :(得分:1)

您可以使用执行和退出的 Invoke-command cmdlet来回避此问题

Invoke-Command -ComputerName Mobius -ScriptBlock {## your stuff}

并将其与管道结合使用,以便在日期命令

的情况下使用

Invoke-Command -ComputerName Mobius -ScriptBlock {echo "01-02-1999" |cmd /c date}

或plink

Invoke-Command -ComputerName Mobius -ScriptBlock {"yourpassword"| &'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe `"bashcommand1 && bashcommand2`" }

甚至更简单

Invoke-Command -ComputerName Mobius -ScriptBlock { &'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe -pw yourpass `"bashcommand1 && bashcommand2`" }

但是@ X0n表示没有真正的互动性。