Копирование журналов / файлов новее X дней с SFTP-сервера Unix в Windows с использованием сборки WinSCP .NET в PowerShell

Этот код загружает файлы с удаленного сервера Unix в Windows Server с помощью сборки WinSCP .NET. Но вместо того, чтобы копировать все файлы журналов из папки журналов на исходном сервере Unix на целевой сервер Windows, я просто хочу, чтобы он копировал журналы за последние 30 дней. Причина в том, что я не хочу, чтобы он заполнял диск C на конечном сервере Windows.

param (
    $localPath = "d:\Logs\OnlineLogs",
    $remotePath = "/application/oracle",
    $fileName =  "int_access*.*"
)

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

    # Set up session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = ""
        UserName = ""
        Password = ""
        SshHostKeyFingerprint = ""
    }

    $session = New-Object WinSCP.Session 

    try
    {
        $session.Open($sessionOptions)

        $session.GetFiles(($remotePath + $fileName), ($localPath + $fileName)).Check()
    }
    finally
    {
        #Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}

person JamesBond    schedule 02.08.2018    source источник


Ответы (1)


Вы можете использовать файловую маску с ограничением по времени:

$transferOptions = New-Object WinSCP.TransferOptions -Property @{
    FileMask = "*>=30D"
}

$session.GetFiles(
    (Join-Path $remotePath $fileName),
    [WinSCP.RemotePath]::Combine($localPath, "*.*"),
    $False, $transferOptions).Check()

(Вам также не хватало косой черты и обратной косой черты между путем и именем файла, поэтому я добавил Join-Path и RemotePath.Combine < / a> звонки).

person Martin Prikryl    schedule 02.08.2018
comment
после вышеуказанного изменения скрипт соответствует, но файлы не передаются сейчас - person JamesBond; 07.08.2018
comment
Разместите файл журнала (установите $session.SessionLogPath = "winscp.log"). - person Martin Prikryl; 07.08.2018
comment
не $ session.open () такой же, как в строке выше - person JamesBond; 12.09.2018
comment
Я не понимаю вашего комментария. - person Martin Prikryl; 12.09.2018
comment
при запуске скрипта возникает ошибка. Невозможно привязать аргумент к имени параметра, поскольку он имеет значение NULL. извините, я новичок в PowerShell, и поиск в Google этой ошибки не помогает сопоставить - person JamesBond; 13.09.2018
comment
Удалите try { и } catch { Write-Host "Error: $($_.Exception.Message)" exit 1 } - так вы сможете определить, какая строка вызвала проблему. - person Martin Prikryl; 13.09.2018