Ftp 用于下载、重命名和移动文件的WinSCP脚本

Ftp 用于下载、重命名和移动文件的WinSCP脚本,ftp,sftp,winscp,winscp-net,Ftp,Sftp,Winscp,Winscp Net,免责声明#1:我在WinSCP上发布了这个问题,但没有收到任何回复,而且这个问题对时间很敏感。免责声明#2:我将此交叉发布的合法性建立在Meta的主题上。在序言中 到目前为止,我一直在使用WS_FTP,但希望切换到WinSCP。 我正在尝试将此WS_FTP脚本转换为WinSCP: "C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe" -s "sftp://USERNAME:PASSWORD@ftpus.pointclickcare.co

免责声明#1:我在WinSCP上发布了这个问题,但没有收到任何回复,而且这个问题对时间很敏感。
免责声明#2:我将此交叉发布的合法性建立在Meta的主题上。
在序言中

到目前为止,我一直在使用WS_FTP,但希望切换到WinSCP。 我正在尝试将此WS_FTP脚本转换为WinSCP:

"C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe"
-s "sftp://USERNAME:PASSWORD@ftpus.pointclickcare.com/USERNAME/logs/*.sqb"
-d "local:C:\PccDataRelay\LogDownloads\"
-rename tx_[yyyy]-[mm]-[dd]_[hh]-[tt]-[ss]_[OnlyName].[OnlyExt]
-move "/USERNAME/logs/transferred/"
我已经能够部分转换它:

cd C:\PccDataRelay\TestDownloads

"C:\Program Files (x86)\WinSCP\winscp.com" /ini=nul /log=C:\PccDataRelay\AuditLogs\incremental_download.log /command ^
    "open sftp://USERNAME:PASSWORD@ftpus.pointclickcare.com/USERNAME/logs/ -hostkey=""ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx""" ^
    "get /USERNAME/logs/*.sqb" ^
    "exit"

但这只是下载文件。如何让它重命名和移动原始文件,同时将它们保留在FTP站点上

WinSCP没有类似于
-rename
-move
开关的功能。因此,在一个简单的脚本中实现这项任务并不是一件容易的事,因此它的行为是事务性的(仅重命名和移动成功下载的文件)


但是你可以从一个地方使用

#加载WinSCP.NET程序集
添加类型-路径“WinSCPnet.dll”
#设置会话选项
$sessionOptions=新对象WinSCP.sessionOptions-属性@{
协议=[WinSCP.Protocol]::Sftp
HostName=“ftpus.pointclickcare.com”
UserName=“UserName”
Password=“Password”
SshHostKeyFingerprint=“ssh rsa 2048 xxxxxxxxxx…”
}
#连接
写主机“连接…”
$session=新对象WinSCP.session
$session.SessionLogPath=“C:\PccDataRelay\AuditLogs\incremental\u download.log”
$session.Open($sessionOptions)
#下载文件
$transferResult=
$session.GetFiles(“/USERNAME/logs/*.sqb”,“C:\PccDataRelay\LogDownloads\*”)
#处理源文件
foreach($transfer-in$transferResult.Transfers)
{
#成功还是错误?
如果($transfer.Error-eq$Null)
{
$newName=
“/USERNAME/logs/transferred/tx”+
(获取日期-格式为“yyyy-MM-dd-hh-MM-ss”)+“\ux”+
[IO.Path]::GetFileName($transfer.FileName)
写主机(
下载$($transfer.FileName)成功,移动到备份$newName)
$session.MoveFile($transfer.FileName,$newName)
}
其他的
{
写主机(
“下载$($transfer.FileName)失败:$($transfer.Error.Message)”)
}
}
本答案所依据的一些参考资料:

  • )
另见: