1

I've got a batch script which runs via schtasks every night on different remote Windows PCs (Windows 7 32-bit SP1). These PCs need to FTP files to and from a Linux server. Currently using FTP, the batch script works just fine.

Now the Linux servers are being changed over to use only SFTP. I'd like to write a short PowerShell script to SFTP the same files to/from the server – I've got Posh-Ssh installed to use in PowerShell on these Windows systems (PS Version 5.1).

Currently the part of the batch script doing the FTP looks like this:

REM make temp file for FTP
echo open pos%STORE%               >  C:\temp\temp.txt
echo username                      >> C:\temp\temp.txt
echo password                      >> C:\temp\temp.txt
echo ascii                         >> C:\temp\temp.txt    
echo cd /path/to/use               >> C:\temp\temp.txt
echo put %USERDOMAIN%.ftp          >> C:\temp\temp.txt
echo put posdaily.txt posdaily.ftp >> C:\temp\temp.txt
echo get prod.txt                  >> C:\temp\temp.txt
echo get posdaily.ftp              >> C:\temp\temp.txt
echo quit                          >> C:\temp\temp.txt

REM **** FTP to put/get files from POS Server ****
echo First Try Connect to POS ....
ftp -iv -s:\temp\temp.txt >> C:\log\Daily.log  2>&1

Is there a way to use this same temp.txt that's being created to pass the username/password/put/get to a PowerShell script that uses Posh-Ssh? What changes would I need to make to the temp.txt file?

I can call a separate batch script which runs the PowerShell script – I've done that in previous batch scripts – but I'm not sure how to write the PowerShell script – what command/commands would I use in the PowerShell script to use the data in temp.txt?

If I get it working in PowerShell, I should be able to put a call to this same PowerShell script in a C# and VB script that need to do that same thing.

Martin Prikryl
  • 167,268
  • 50
  • 405
  • 846
BigRedEO
  • 707
  • 4
  • 10
  • 27
  • Why do you feel that moving from FTP to SFTP means that you need to move from batch to PowerShell? – SomethingDark Oct 25 '19 at 19:42
  • @SomethingDark Suggestion that was given to me. Is there a way to use SFTP at the command line/batch file in the same way that I'm using FTP above? – BigRedEO Oct 25 '19 at 19:44
  • @SomethingDark - But if I get it working in Powershell, I should be able to put a call to this same Powershell script in a C# and VB script that need to do that same thing. – BigRedEO Oct 25 '19 at 19:46
  • 2
    FTP is just an executable, so if you can find another client that can also handle SFTP (like PuTTY), you can use that instead. With regard to your second script, you can just as easily call a batch script from C# or VBScript. – SomethingDark Oct 25 '19 at 19:49

1 Answers1

3

Is there a way to use this same temp.txt that's being created to pass the username/password/put/get to a Powershell script that uses Posh-Ssh?

No you cannot. Posh-Ssh is a native PowerShell module, which does not consume scripts like ftp does.

Also as @SomethingDark already commented, there's no need to switch to PowerShell for SFTP. Not even for C#/VB.NET. What is the difference between calling a PowerShell script and a batch file from C#/VB.NET?

For SFTP in a batch file, see:
Secure FTP using Windows batch script

My answer there suggest using (my) WinSCP SFTP client. And WinSCP can actually consume a script similar (while not identical) to ftp. And there is a guide for converting ftp script to WinSCP script.


Though if you aim to have a same/similar code for PowerShell/C#/VB.NET, you better use an SFTP .NET assembly. See SFTP Libraries for .NET.

If you want a native .NET assembly, I would recommend SSH.NET (though its development ceased in last few years). And you actually use that already, don't you?

WinSCP also has .NET assembly – but it's not a completely native .NET assembly. On the other hand, WinSCP GUI can generate a code template for SFTP for all of PowerShell, C#, and VB.NET.

Though why don't you implement your transfer functionality into a custom assembly and reuse it from all of PowerShell/C#/VB.NET?

Martin Prikryl
  • 167,268
  • 50
  • 405
  • 846