Выполнить команду Powershell через SSH

1

Пробовал следующую команду от узла 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
  • 0
    SSH, вероятно, ест там цитаты.
Теги:
powershell
ssh
cygwin

2 ответа

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

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

  • USER @HOSTNAME
  • PowerShell
  • -Command
  • & {Get-Host}

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

  • powershell -Command & {Get-Host}

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

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

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

Попытайтесь избежать ", так что это выглядит так:

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

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

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

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

  • 0
    Это правильная идея, но '&' является особенным для оболочек Unix. Так что вам тоже нужно избегать '&'.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню