Выполнить команду Powershell через SSH - PullRequest
1 голос
/ 21 июня 2011

Попробовал следующую команду от хоста Ubuntu к клиенту Windows через Cygwin / OpenSHH.

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

Выход:

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

Однако, когда я попробовал ту же команду через Cygwin в Windows-клиенте, я получил правильный вывод.

$ 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

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Попробуйте убежать от ", поэтому оно выглядит следующим образом:

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

Если это не сработает, попробуйте убежать от {,} и / или & тоже. Я думаю, что это проблема с выходом;)

РЕДАКТИРОВАТЬ:

Или даже попытаться избежать его с помощью \\\ ", что приводит к экранированию" и \ (не знаю, как powershell хочет команду, не знаком с ней)

0 голосов
/ 02 августа 2015
ssh USER@HOSTNAME powershell -Command "& {Get-Host}"

Когда вы запускаете эту команду, программа ssh в локальной системе получает аргументы:

  • USER @ HOSTNAME
  • 1007 * PowerShell *
  • -command
  • & {Get-Host}

Двойные кавычки вокруг последнего аргумента удаляются локальной оболочкой перед выполнением ssh. ssh затем объединяет три аргумента, которые составляют удаленную команду, в одну строку:

  • powershell -Command & {Get-Host}

Отправляет эту строку в удаленную систему для выполнения. Удаленная система не интерпретирует эту строку так, как вы хотите.

Вам необходимо выполнить команду таким образом, чтобы кавычки были включены в версию команды, отправленной в удаленную систему. Это должно сделать это:

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