Powershell возвращает локальное копирование, не поддерживаемое при использовании переменных в pscp

Я борюсь некоторое время с использованием переменной с командой pscp.

ForEach ($Server in $Servers)
{
.\pscp.exe -pw $password create_ssh $myUsername@$Server:/home/$myUsername/create_ssh
.\plink.exe -pw $password $myUsername@$Server -C "uname -r"
}

Выход

Local to local copy not supported
2.6.32-573.1.1.el6.x86_64

Когда я пытаюсь указать имя хоста, не используя переменную, нет никаких проблем с передачей файла. Однако, если я пытаюсь использовать переменную $Server, я получаю сообщение об ошибке "Локальное копирование не поддерживается". Я подумал, что это может быть проблема с самой переменной, но.\ Plink работает без проблем.

Я пытался использовать запятые, escape @, полные пути и т. Д., Кажется, ничего не работает. Я не могу использовать winscp.dll, так как в этом конкретном случае мне нужно автоматически принимать ключи хоста (что небезопасно, но действительно специфично только для этого случая) - это обеспечивается только pscp.

Большое спасибо!

1 ответ

Я знаю, что это довольно старо, но я наткнулся и на эту проблему. Оказывается, вам нужно использовать оператор подвыражения $() для серверной переменной вот так:

$($Server)

Таким образом, ваши команды будут выглядеть так:

.\pscp.exe -pw $password create_ssh $myUsername@$($Server):/home/$myUsername/create_ssh
.\plink.exe -pw $password $myUsername@$($Server) -C "uname -r"
Другие вопросы по тегам