Вызовите несколько команд из powershell, например, psftp - PullRequest
6 голосов
/ 19 декабря 2011

Я пытаюсь SFTP-файл из powershell, используя psftp.exe (putty).Я могу запустить одну команду, например, открыть, но мне нужно изменить каталог по умолчанию, а затем положить файл.Следующий код приводит меня к psftp, но игнорирует строки от cd .. до свидания.Я предполагаю, что могу запустить командный файл, который имеет команды sftp, но если возможно, я хочу выполнить с помощью powershell.

$file = "C:\Source\asdf.csv"
$user = "user"
$pass = "pass"
$hst = "host"
$path="C:\ProgramFiles\psftp.exe"
$cmd = @"
-pw $pass $user@$hst
cd ..
cd upload
put $file
bye
"@

invoke-expression "$path $cmd"

1 Ответ

6 голосов
/ 19 декабря 2011

Попробуйте:

$file = "C:\Source\asdf.csv"
$user = "user"
$pass = "pass"
$hst = "host"
$path="C:\ProgramFiles\psftp.exe"
$cmd = @(
"cd ..",
"cd upload",
"put $file",
"bye"
)

$cmd | & $path -pw $pass "$user@$hst"

В ответе на вопросы в комментарии:

Первая часть, "$ cmd |" передает содержимое $ cmd в следующую команду. Поскольку это внешняя программа (в отличие от командлета или функции), она отправляет содержимое $ cmd на стандартный ввод внешней программы.

В части "& $ path" говорится, что содержимое $ path следует рассматривать как имя команды или программы и выполнять его.

Остальная часть строки передается внешней программе в качестве аргументов командной строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...