область разработки: используйте PowerShell и WinSCP .NET сборки для автоматизации ночные загрузки с помощью метки времени файла для идентификации файлов для загрузки. FTP-сервер, подключенный к IIS, поэтому он не поддерживает все команды, такие как MLSD, в его текущей конфигурации, и я не вижу, чтобы они вносили изменения по запросу.
проблема: файлы, которые имеют 1 или 2-значный месяц, возвращают разные длины строк, которые я не уверен, как это обойти. Мой код сейчас работает, но остановится работаем в октябре.
например, March отображает 3 / dd / YYYYY вместо 03 / dd / yyyy
другие Примечания: сначала я попытался написать сценарий с помощью WinSCP.com, но я не смог найти способ правильно указать дату.
например, вы можете указать *.zip>=1D
или *.zip<=1D
, а *.zip=1D
или *.zip==1D
в настоящее время не поддерживаются с последней версией WinSCP.
код:
$yesterday = [DateTime]::Today.AddDays(-1).ToString("M/dd/yyyy")
# OR I have to use ToString("MM/dd/yyyy") for months 10-12,
# but I need both formats to work.
#delete the temporary file
del .FTPfiles.txt
# Load WinSCP .NET assembly
Add-Type -Path "C:Program Files (x86)WinSCPWinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
HostName = "server.com"
UserName = "joe"
Password = "smith"
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
$directory = $session.ListDirectory("/Folder")
foreach ($fileInfo in $directory.Files)
{
Write-Output ("{1} {0}" -f
$fileInfo.Name, $fileInfo.LastWriteTime) >> FTPfiles.txt
}
$fileList = get-content .FTPfiles.txt | findstr $yesterday
$stripped = $fileList -creplace '^.*Z12', 'Z12'
# Download files
$remotePath = "/Folder/"
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$lines = $stripped
foreach ($line in $lines)
{
Write-Host ("Downloading {0} ..." -f $line)
$session.GetFiles($remotePath+$line, "C:Downloads").Check()
}
}
catch [Exception]
{
Write-Host ("Error: {0}" -f $_.Exception.Message)
exit 1
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
The $fileInfo in $directory.Files
пишет время последней записи, а затем имя файла в FTPfiles.txt
для всех файлов, содержащихся на FTP сервере из указанной папки. Этот текстовый файл затем считывается, а затем дополнительно сводится только к файлам, которые имеют время записи, которое произошло на вчерашнюю дату, которая в настоящее время работает только 9 месяцев в году из-за формата даты, используя 1 цифру в течение месяца вместо 2 цифр.
затем этот файл считывается и удаляется из дат перед именами файлов, так что имена файлов будут использоваться для цикла загрузки. Тот трансформация выглядит так:
FROM:
3/14/2017 2:04:00 AM Z1234_20170314050001_1.zip
3/14/2017 3:04:00 AM Z1234_20170315060002_1.zip
3/14/2017 4:04:00 AM Z1234_20170316070001_1.zip
3/14/2017 5:04:00 AM Z1234_20170317080001_1.zip
TO:
Z1234_20170314050001_1.zip
Z1234_20170315060002_1.zip
Z1234_20170316070001_1.zip
Z1234_20170317080001_1.zip
затем скрипт использует эти имена файлов для загрузки необходимых файлов с предыдущего дня.