我有一个批处理脚本,该脚本每天晚上都通过schtasks在不同的远程Windows PC(Windows 7 32位SP1)上运行。这些PC需要通过FTP服务器与Linux服务器之间的FTP文件。当前使用FTP,批处理脚本可以正常工作。
现在Linux服务器已被更改为仅使用SFTP。我想编写一个简短的Powershell脚本来向服务器发送相同的文件,或者从服务器发送相同的文件-我已经安装了Posh-Ssh,可以在这些Windows系统(PS版本5.1)上的Powershell中使用。
当前执行FTP的批处理脚本部分如下所示:
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
是否有一种方法可以使用正在创建的相同temp.txt来将用户名/密码/ put / get传递给使用Posh-Ssh的Powershell脚本?我需要对temp.txt文件进行哪些更改?
我可以调用运行Powershell脚本的单独的批处理脚本-我已经在以前的批处理脚本中做到了-但我不确定如何编写Powershell脚本-我将在Powershell脚本中使用哪些命令使用temp.txt中的数据?
是否有使用创建的相同temp.txt的方法来将用户名/密码/输入/获取传递给使用Posh-Ssh的Powershell脚本?
不,你不能。 Posh-Ssh是PowerShell的本机模块,它不像ftp
那样使用脚本。
[@SomethingDark也已评论,因此无需切换到PowerShell for SFTP。甚至对于C#/ VB.NET也不行。 从C#/ VB.NET调用PowerShell脚本和批处理文件有什么区别?
对于批处理文件中的SFTP,请参阅:Secure FTP using Windows batch script
我的回答建议使用(我的)WinSCP SFTP客户端。WinSCP实际上可以使用与ftp
类似(但不完全相同)的脚本。还有一个guide for converting ftp
script to WinSCP script。
尽管如果您打算为PowerShell / C#/ VB.NET使用相同/相似的代码,则最好使用SFTP .NET程序集。参见ftp
[如果您想要本机.NET程序集,我建议您使用SFTP Libraries for .NET(尽管最近几年它的开发已停止)。 您实际上是SSH.NET
WinSCP也use that already, don't you? –但这不是一个完全本机的.NET程序集。另一方面,WinSCP GUI可以has .NET assembly。