如何在 WinSCP 命令中执行的 PowerShell 脚本中传递参数?

How to pass parameters in PowerShell script which executes in WinSCP command?

我有一个 PowerShell 脚本

cd "C:\Program Files (x86)\WinSCP"
. .\WinSCP.exe /console /script="L:\Work\SAS Data\FTP\local2remote.txt"  /log=log.txt

调用WinSCP命令文件

option batch on
open ftp://user:pass@host -passive=on
lcd "J:\Work\SAS Data\Roman\Lists"
put target.csv
exit

我想将 "J:\Work\SAS Data\Roman\Lists" 转换为 PowerShell 脚本中的参数,该参数可以在 txt 文件中传递。文件 target.csv 也是如此。任何帮助表示赞赏。

最简单的方法(不涉及编写临时脚本文件的方法)是为 WinSCP 切换到 /command

# You don't need the . operator to run external programs
.\WinSCP.exe /console /log=log.txt /command `
  'open ftp://user:pass@host -passive=on' `
  'lcd "J:\Work\SAS Data\Roman\Lists"' `
  'put target.csv' `
  'exit'

现在您可以更轻松地合并脚本参数:

param([string] $Path, [string] $FileName)

& 'C:\Program Files (x86)\WinSCP\WinSCP.exe' /console /log=log.txt /command `
  'open ftp://user:pass@host -passive=on' `
  "lcd `"$Path`"" `
  "put `"$FileName`"" `
  'exit'

但是,您当然可以,仍然编写命令文件并传递:

$script = Join-Path $Env:TEMP winscp-commands.txt

"open ftp://user:pass@host -passive=on
lcd ""$Path""
put ""$FileName""
exit" | Out-File -Encoding Default $script

& 'C:\Program Files (x86)\WinSCP\WinSCP.exe' /console /log=log.txt /script=$script
Remove-Item $script