TransferSupport.State set to "On", but exits upon error
I have the TransferSupport.State in TransferOptions set to "On" yet if there is an issue, the script exits and I see this error:
Am I improperly applying the TransferSupport state? Here is the script I am using:
Upload of FILENAME HERE failed: WinSCP.SessionRemoteException: Error transferring file 'FILENAME HERE'. Copying files to remote side failed. Unexpected error encountered. Please retry. Permissions of kept with their defaults Timestamp of kept with its default (current time) Error: Exception calling "Check" with "0" argument(s): "Error transferring file 'FILENAME HERE'. Copying files to remote side failed. Unexpected error encountered. Please retry."
Am I improperly applying the TransferSupport state? Here is the script I am using:
# Load WinSCP .NET assembly Add-Type -Path "WinSCPnet.dll" # Session.FileTransferred event handler function FileTransferred { param($e) if ($e.Error -eq $Null) { Write-Host "Upload of $($e.FileName) succeeded" } else { Write-Host "Upload of $($e.FileName) failed: $($e.Error)" } if ($e.Chmod -ne $Null) { if ($e.Chmod.Error -eq $Null) { Write-Host "Permissions of $($e.Chmod.FileName) set to $($e.Chmod.FilePermissions)" } else { Write-Host "Setting permissions of $($e.Chmod.FileName) failed: $($e.Chmod.Error)" } } else { Write-Host "Permissions of $($e.Destination) kept with their defaults" } if ($e.Touch -ne $Null) { if ($e.Touch.Error -eq $Null) { Write-Host "Timestamp of $($e.Touch.FileName) set to $($e.Touch.LastWriteTime)" } else { Write-Host "Setting timestamp of $($e.Touch.FileName) failed: $($e.Touch.Error)" } } else { # This should never happen during "local to remote" synchronization Write-Host "Timestamp of $($e.Destination) kept with its default (current time)" } } function FileTransferProgress { param($e) Write-Progress ` -Id 1 -Activity $e.FileName -Status ("{0:P0} complete:" -f $e.FileProgress) ` -PercentComplete ($e.FileProgress * 100) } try { # Set up session options $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ "sessionOptions here" = "" } $session = New-Object WinSCP.Session try { # Will continuously report progress of synchronization $session.add_FileTransferred( { FileTransferred($_) } ) # Will continuously report progress of transfer $session.add_FileTransferProgress( { FileTransferProgress($_) } ) # Connect $session.Open($sessionOptions) $transferOptions = New-Object WinSCP.TransferOptions $transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::On # Synchronize files $synchronizationResult = $session.SynchronizeDirectories( [WinSCP.SynchronizationMode]::Remote, #Remote is synced to match local "LOCAL", #Local repository "REMOTE", #Remote repository $True, #Delete remove files not in local repository $False, #Do not sync in mirror mode [WinSCP.SynchronizationCriteria]::Time, #Sync based on timestamp $transferOptions ) # Throw on any error $synchronizationResult.Check() } finally { # Disconnect, clean up $session.Dispose() } exit 0 } catch { Write-Host "Error: $($_.Exception.Message)" exit 1 }