Reputation: 651
I have a PowerShell script
cd "C:\Program Files (x86)\WinSCP"
. .\WinSCP.exe /console /script="L:\Work\SAS Data\FTP\local2remote.txt" /log=log.txt
It calls WinSCP command file
option batch on
open ftp://user:pass@host -passive=on
lcd "J:\Work\SAS Data\Roman\Lists"
put target.csv
exit
I want to convert "J:\Work\SAS Data\Roman\Lists" to a parameter in the PowerShell script where the parameter can be passed in the txt file. Same goes for the file target.csv. Any help appreciated.
Upvotes: 1
Views: 1522
Reputation: 354406
The easiest way (and one that doesn't involve writing a temporary script file) would be to switch to /command
for WinSCP:
# 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'
Now you have a much easier time incorporating script parameters:
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'
However, you can of course, still write a command file and pass that:
$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
Upvotes: 4