Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

martin

Re: TransferSupport.State set to "On", but exits upon error

The "Unexpected error encountered. Please retry" most probably comes from the server. I cannot know what it means. Why do you think it has anything to do with TransferOptions.ResumeSupport?

Can you upload the file anyhow? Using WinSCP GUI? Using any other client?
mcarner

I may be understanding this wrong. Sounds like there is no support for this functionality in the .NET version.
mcarner5

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:

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
}