Копирование новых файлов из вновь созданных папок в моей корзине S3 на локальный компьютер с помощью PowerShell - PullRequest
0 голосов
/ 05 октября 2018

У нас есть программа, работающая на сервере, которая копирует XML-файлы в нашу корзину S3.Но он создает папки в соответствии с датой.Таким образом, создается папка для года, а затем создается подпапка для месяца, а затем еще одна подпапка для дня.Например:

S3://AppMyBucket/Documents/2018/Oct/05

Таким образом, каждый день он создает папку в соответствии с днем, 01, 02, 03 и т. Д. И помещает .xmlфайлы в этих папках.Мне нужно создать сценарий PowerShell, который будет запускаться каждые 15 минут, чтобы скопировать новые файлы, которые попадают в последнюю папку, созданную из нашей корзины S3, в папку на моем локальном компьютере, а затем вызвать другую программу для обработки этих файлов.

Мой вопрос: как я могу скопировать новые файлы, созданные из новых папок, созданных в нашей корзине S3 (S3://AppBucket/Documents/2018/Oct/05...), на мой локальный компьютер с Windows (D:\DocFolder\), а затем вызвать программу (AIMParser.exe) для обработкиэти XML-файлы?

Пожалуйста, прости меня, поскольку я новичок в PowerShell.

1 Ответ

0 голосов
/ 08 октября 2018

Следующий пример:

  • Использование Сборка WinSCP .NET для доступа к корзине S3
  • Поиск последнего года (лексикографически)
  • Находит последний месяц в году
  • Находит последний день в месяце (лексикографически)
  • Находит последний файл в день (по метке времени файла)
Add-Type -Path "WinSCPnet.dll"

$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::S3
    HostName = "s3.amazonaws.com"
    PortNumber = 443
    UserName = "access key id"
    Password = "secret access key"
}

Write-Host "Connecting..."
$session = New-Object WinSCP.Session
$session.SessionLogPath = "s3.log"
$session.Open($sessionOptions)

$remotePath = "/AppMyBucket/Documents";
$localPath = "D:\DocFolder"

$yearFolder =
    $session.ListDirectory($remotePath).Files |
        Where-Object { $_.IsDirectory } |
        Sort-Object -Descending |
        Select-Object -First 1
Write-Host "Latest year is $($yearFolder.Name)"

$yearPath = [WinSCP.RemotePath]::Combine($remotePath, $yearFolder.Name)

$monthFolder =
    $session.ListDirectory($yearPath).Files |
        Where-Object { $_.IsDirectory } |
        Sort-Object -Descending -Property @{ Expression = {
            Get-Date -Date "$($_.Name) 1 $($yearFolder.Name)" -Format "MM" } } |
        Select-Object -First 1

Write-Host "Latest month is $($monthFolder.Name)"

$monthPath = [WinSCP.RemotePath]::Combine($yearPath, $monthFolder.Name)

$dayFolder =
    $session.ListDirectory($monthPath).Files |
        Where-Object { $_.IsDirectory } |
        Sort-Object -Descending |
        Select-Object -First 1

Write-Host "Latest day is $($dayFolder.Name)"

$dayPath = [WinSCP.RemotePath]::Combine($monthPath, $dayFolder.Name)

$latest = 
    $session.ListDirectory($dayPath).Files |
        Where-Object { -Not $_.IsDirectory } |
        Sort-Object LastWriteTime -Descending |
        Select-Object -First 1

Write-Host "Latest file is $($latest.Name), downloading..."

$session.GetFiles($latest.FullName, (Join-Path $localPath "*")).Check()

Write-Host "Done"
$session.Dispose()

(я автор WinSCP)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...