Powershell-Skript zu SFTP Neue Dateien

Powershell-Skript zu SFTP Neue Dateien

Ich habe hier ein Skript, das Dateien per SFTP von einem Ort zum anderen überträgt. Das Skript funktioniert einwandfrei, ich möchte es jedoch so ändern, dass es nur Dateien kopiert, die noch nicht vorhanden sind. Ich bin ein ziemlicher Neuling in Sachen Powershell, daher wäre ich für jede Hilfe sehr dankbar.

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
}

Vielen Dank.

Antwort1

Das Skript, das Sie aus dem WinSCP-Beispiel für dieSession.GetFileswurde nur für eine einzelne Datei entwickelt. Sie haben versucht, es so zu manipulieren, dass stattdessen Verzeichnisse synchronisiert werden. Das kann nicht funktionieren.

Um Verzeichnisse zu synchronisieren, verwenden Sie dieSession.SynchronizeDirectories:

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

# Throw on any error
$synchronizationResult.Check()

verwandte Informationen