【问题标题】:Execute Powershell command over SSH通过 SSH 执行 Powershell 命令
【发布时间】:2011-09-19 09:56:31
【问题描述】:

尝试通过 Cygwin/OpenSHH 从 Ubuntu 主机到 Windows 客户端执行以下命令。

ssh  USER@HOSTNAME  powershell -Command "& {Get-Host}"

输出:

Cannot process the command because of a missing parameter. A command must follow -Command.

但是,当我在 windows 客户端中通过 cygwin 尝试相同的命令时,我得到了正确的输出。

$ powershell -Command "& {Get-Host}"
Welcome to Powershell augmented with NaviNet tools.
Bootstrapped ScmToolsProjectConfiguration.


Name             : ConsoleHost
Version          : 2.0
InstanceId       : 0b2e578e-50b9-42ab-a07c-0c4ef762ba0c
UI               : System.Management.Automation.Internal.Host.InternalHostUser
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

【问题讨论】:

  • SSH 可能在那里吃引号。

标签: python linux powershell ssh cygwin


【解决方案1】:

尝试转义“,所以它看起来像:

ssh USER@HOSTNAME powershell -Command \"& {Get-Host}\"

如果这不起作用,请尝试转义 {,} 和/或 &。我认为这是一个逃避问题;)

编辑:

或者甚至尝试用 \\\" 转义它,这会导致转义的 " 和 \。 (不知道powershell如何想要这个命令,不熟悉)

【讨论】:

  • 这是正确的想法,但 '&' 对于 unix shell 来说是特殊的。所以你也需要转义“&”。
【解决方案2】:
ssh USER@HOSTNAME powershell -Command "& {Get-Host}"

当您运行此命令时,本地系统上的 ssh 程序会获取参数:

  • USER@HOSTNAME
  • 电源外壳
  • -命令
  • & {获取主机}

在执行ssh 之前,本地shell 会去掉最后一个参数的双引号。 ssh 然后将构成远程命令的三个参数连接成一个字符串:

  • powershell -Command & {Get-Host}

它将这个字符串发送到要执行的远程系统。远程系统未按照您希望的方式解释此字符串。

您需要以引号包含在发送到远程系统的命令版本中的方式发出命令。应该这样做:

ssh USER@HOSTNAME 'powershell -Command "& {Get-Host}"'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多