Скрипт Powershell для SFTP Новые файлы

Скрипт Powershell для SFTP Новые файлы

У меня есть скрипт, который копирует файлы SFTP из одного места в другое, скрипт работает нормально, однако я хотел бы изменить его так, чтобы он копировал только те файлы, которых еще нет. Я немного нуб с powershell, поэтому любая помощь будет очень кстати.

cd "c:\Program Files (x86)\WinSCP\" # location of .NET assembly ddl file

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
    $sessionOptions.HostName = "192.168.xxx.xxx"
    $sessionOptions.UserName = "xxxx"
    $sessionOptions.Password = "xxxx"
    $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx"


    $session = New-Object WinSCP.Session

    try
    {
        # Connect
        $session.Open($sessionOptions)

        $stamp = Get-Date -f "yyyyMMdd"
        $fileName = "export_$stamp.txt"
        $remotePath = "/home/user/john/reports"
        $localPath = "\\fileserver\reports\"


        if ($session.FileExists($remotePath))
        {
            if (!(Test-Path $localPath))
            {
                Write-Host (
                    "File {0} exists, local backup {1} does not" -f
                    $remotePath, $localPath)
                $download = $True
            }


            if ($download)
            {
                # Download the file and throw on any error
                $session.GetFiles($remotePath, $localPath).Check()

                Write-Host "Download to backup done."
            }
        }
        else
        {
            Write-Host ("File {0} does not exist yet" -f $remotePath)
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch [Exception]
{
    Write-Host $_.Exception.Message
    exit 1
}

Большое спасибо.

решение1

Скрипт, который вы взяли из примера WinSCP дляSession.GetFilesбыл разработан только для одного файла. Вы попытались изменить его, чтобы синхронизировать каталоги. Это не может работать.

Для синхронизации каталогов используйтеSession.SynchronizeDirectories:

# Synchronize files
$synchronizationResult = $session.SynchronizeDirectories(
    [WinSCP.SynchronizationMode]::Local, $localPath $remotePath)

# Throw on any error
$synchronizationResult.Check()

Связанный контент