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

6

我正在尝试使用psftp.exe(putty)从powershell SFTP文件。我可以运行像打开这样的单个命令,但我需要更改默认目录,然后放置文件。以下代码将带我到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"
1个回答

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的内容视为命令或程序名称并执行它。

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


这很好用。所以我们把命令放在一个数组中,但从那里开始我就不明白了。为什么最后要加上“& $path -pw $pass..”,而开头又有$cmd?&的作用是什么? - Afroz
嘿 @OldFart,有没有办法从命令提示符中捕获错误消息?目前当我检查 $lastexitcode 时,它的值是0。 - Afroz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接