我有三个系统需要在每天之间传输文件:
供应商A(SFTP站点) – 14天后删除文件
供应商B(SFTP站点) – 处理文件后删除文件
公司服务器(Windows 2008) – 将文件存储为备份
每天我都要从供应商A下载新文件到我们公司的服务器,并将它们上传到供应商B.使用简单的文件传输脚本的警告是,从供应商A到公司服务器的文件传输可能会成功,但在从公司服务器到供应商B.因此供应商B缺less一天的文件价值。 供应商B不会告诉我他们何时缺less文件,供应商A并不总是在给定的日子里生成文件。
有关如何自动执行此文件传输scheme的任何想法,以便在发生故障时系统将在稍后再试一次?
您只需添加一些逻辑即可在一段时间后重新尝试上传到供应商B. 如果您达到最大失败次数,请logging错误或发送电子邮件,以便由支持团队手动进行validation。
如果您预计供应商A不会每天生成文件,请确定缺less的date有多重要,您是否应该为这些文件生成警报/电子邮件(例如,您必须致电供应商A以检查文件缺失的原因在预期的时间)。
我会做:
至less每天重复一次,可能每天几次。 或者一天做一次1-3步,但每天几次4-6步。
使用PowerShell的可能实现:
使用WinSCP .NET组装方法Session.SynchronizeDirectories :
$synchronizationResult = $session.SynchronizeDirectories( [WinSCP.SynchronizationMode]::Local, "c:\backup\", "/remote_path/", $False)
分别遍历SynchronizationResult.Downloads和Copy-Item :
foreach ($download in $synchronizationResult.Downloads) { Copy-Item $download.Destination -Destination "C:\upload" }
使用Get-ChildItem来查找最新的文件:
# Find the latest file $latest = Get-ChildItem "C:\backup" | Sort-Object LastWriteTime -Descending | Select-Object -First 1 # Is the latest file older than 5 days? if ($latest.LastWriteTime -lt (Get-Date).AddDays(-5)) { # alert! }
使用WinSCP .NET组装方法Session.PutFiles :
$transferResult = $session.PutFiles("C:\upload\*.*", "/remote_path/")
迭代TransferResult.Transfers和Remove-Item每个:
foreach ($transfer in $transferResult.Transfers) { if ($transfer.Error -eq $Null) { Remove-Item $transfer.FileName } }
同时testingSynchronizationResult.IsSuccess和TransferResult.IsSuccess
(我是WinSCP的作者)