从powershell调用多个命令,例如psftp

Afr*_*roz 6 powershell command-line

我正在尝试使用psftp.exe(putty)从PowerShell SFTP文件.我可以运行单个命令,如open,但我需要更改默认目录然后放入文件.以下代码将我带到psftp但忽略了从cd ..到bye的行.我想我可以运行一个具有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"
Run Code Online (Sandbox Code Playgroud)

Old*_*art 6

尝试一下:

$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"
Run Code Online (Sandbox Code Playgroud)

在回答评论中的问题时:

第一部分,"$ cmd |" 将$ cmd的内容传递给后面的命令.由于它是一个外部程序(而不是cmdlet或函数),它会将$ cmd的内容发送到外部程序的stdin.

"&$ path"部分表示将$ path的内容视为命令或程序名称并执行它.

该行的其余部分作为命令行参数传递给外部程序.