Пробовал следующую команду от узла 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
ssh USER@HOSTNAME powershell -Command "& {Get-Host}"
Когда вы запускаете эту команду, программа ssh в локальной системе получает аргументы:
Двойные кавычки вокруг последнего аргумента разделяются вашей локальной оболочкой перед выполнением ssh
. Затем ssh
объединяет три аргумента, которые составляют удаленную команду в одну строку:
Он отправляет эту строку в удаленную систему, которая будет выполнена. Удаленная система не интерпретирует эту строку так, как вы этого хотите.
Вам необходимо выдать команду таким образом, чтобы кавычки были включены в версию команды, отправленной в удаленную систему. Это должно сделать это:
ssh USER@HOSTNAME 'powershell -Command "& {Get-Host}"'
Попытайтесь избежать ", так что это выглядит так:
ssh USER@HOSTNAME powershell -Command \"& {Get-Host}\"
Если это не сработает, попробуйте также избежать {,} и/или &. Я думаю, что это бегство проблемы;)
РЕДАКТИРОВАТЬ:
Или даже попытайтесь избежать этого с помощью \\\ ", что приводит к экранированию" и a \. (dunno, как powershell хочет команду, не знакомый с ней)