我正在尝试使用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"
答案 0 :(得分: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"
回答评论中的问题:
第一部分,“$ cmd |”将$ cmd的内容传递给后面的命令。由于它是一个外部程序(而不是cmdlet或函数),它会将$ cmd的内容发送到外部程序的stdin。
“& $ path”部分表示将$ path的内容视为命令或程序名称并执行它。
该行的其余部分作为命令行参数传递给外部程序。