PowerShell: рекурсивная загрузка файлов на FTP-сервер, создание любого каталога, если он не существует (без catch catch) - PullRequest
1 голос
/ 16 мая 2019

Я пишу сценарий PowerShell, который будет выполняться через определенные промежутки времени, который будет захватывать любое содержимое определенного каталога + подкаталогов и загружать его копию на FTP-сервер.

Если файл уже существует на сервере, он будет перезаписан.
Если каталог не существует на сервере, он будет создан.

Я достиг большей части того, что мне нужно, но я застрял при создании подкаталога, если не существует части.

Код, который у меня есть, такой, хотя еще не совсем чистый.

function UploadFilesInDirectory($RemoteDestination, $LocalSource) {
    $local_files = Get-ChildItem $LocalSource

    foreach ($local_file in $local_files)
    {
        $isDirectory = (Get-Item $local_file.FullName) -is [System.IO.DirectoryInfo]

        if ($isDirectory) 
        {
            UploadFilesInDirectory -RemoteDestination "$RemoteDestination" -LocalSource "$LocalSource\$local_file"
        } 
        else 
        {
            Write-Host "Uploading $local_file"

            $desinationPath = $LocalSource.Replace("$local_backup\", "")
            $desinationPath = "$remote_connection$desinationPath\$local_file".Replace("\", "/")

            $webclient.UploadFile("$desinationPath", $file.FullName )   
        }
    }
}

Любая помощь будет оценена.

1 Ответ

1 голос
/ 19 мая 2019

Я не думаю, что можно эффективно проверить наличие каталога / файла FTP с простой функциональностью .NET / PowerShell без использования try / catch.

  • Либо вам нужно использовать FtpWebRequest функции для проверки существования, но вы должны использовать try / catch:
    Проверка существования файла на FTP-сервере в PowerShell

    Не думаю, что это так уж плохо (если вы исключите тест из функции).

  • Или вам нужно использовать сторонний FTP модуль / библиотека / сборка / инструмент. Например. my Сборка WinSCP .NET . Об этом также говорится в моем ответе на
    Проверка существования файла на FTP-сервере в PowerShell

  • Или вам нужно использовать что-то вроде ListDirectory, чтобы получить весь список родительских каталогов, проанализировать его и найти каталог, который вы ищете. Это совершенно неэффективно.

...