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: Can upload files in GUI but not PowerShell using WinSCP

I do not see any temp file being created in the log. Am I missing something?
Are you able to upload the very same file anyhow? In WinSCP GUI? Or in any other SFTP client? Post a log file for that.
And please post new PowerShell log file with timeout set correctly. Currently you have it set to 0. The Timeout is TimeSpan, not an integer. You might use TimeoutInMilliseconds instead.
kul2bme

Re: Can upload files in GUI but not PowerShell using WinSCP

Well I spoke too soon. The error was delayed in getting back to my email. It still gave me the error on the large file...
Error: Exception calling "Check" with "0" argument(s): "Cannot overwrite remote file '/REMOTEPATH/af2e8808-9242-4897-ab39-52025b856913.txt'.$$

Press 'Delete' to delete the file and create new one instead of overwriting it.$$ Permission denied.
Error code: 3
Error message from server (en): Permission denied"

I thought the parameter
$transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::Off
was supposed to take care of trying to create a temp file on the destination.

I have attached the log edited for privacy.
kul2bme

Re: Can upload files in GUI but not PowerShell using WinSCP

I changed SendBuf and removed remaining AddRawSettings and was able to transfer both large and small files perfectly. Thank you Martin for your help!
martin

Re: Can upload files in GUI but not PowerShell using WinSCP

Was the fix disabling the "Optimize connection buffer size"? The SendBuf is raw session setting, not transfer setting. So it should go to SessionOptions:
$sessionOptions.AddRawSettings("SendBuf", "0");

The rest of your AddRawSettings calls can probably be removed (those are defaults or irrelevant).
kul2bme

Can upload files in GUI but not PowerShell using WinSCP

I have successfully (finally!) gotten large files to upload to an SFTP site with the GUI. I tried getting the setup identical in the PowerShell script using WinSCP dll. However, only the small files work in the PS script process. The large files still give me an error in the PS script process. It still appears to creating a temporary file for large file transfers even though I believe I have it set properly to not do so. See below ...
Error: Exception calling "Check" with "0" argument(s): "Cannot overwrite remote file '/REMOTEPATH/70d0ff59-d4a7-4648-b106-4e36ef4f550d.txt'.$$

Press 'Delete' to delete the file and create new one instead of overwriting it.$$ Permission denied.
Error code: 3
Error message from server (en): Permission denied"

I am attaching the log file from the GUI where the files worked as well as the log file from when the PS script had all the same settings, as best that I can tell, but failed for the large file. I have edited the files for privacy. Please compare and let me know what I am doing wrong.

Additionally, I am including below the code from the PS script for review, also edited for privacy.
################ Send to SFTP ########################
try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll";
 
    #pass the new file to secure FTP
    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "HOST NAME"
        UserName = "USERNAME"
        Password = 'PASSWORD'
        SshHostKeyFingerprint = "ssh-dss 1024 FINGER PRINT"
        Timeout = 6000
    }
 
    $session = New-Object WinSCP.Session;
    try
    {
        $session.SessionLogPath = '\\NGN-IMAGE\NCTracks\Logs\winscp.log';
       
        ## Connect
        $session.Open($sessionOptions);
       
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.AddRawSettings("NewerOnly", "0");
        $transferOptions.AddRawSettings("PreserveTimeDirs", "0");
        $transferOptions.AddRawSettings("ExcludeHiddenFiles", "0");
        $transferOptions.AddRawSettings("ExcludeEmptyDirectories", "0");
        $transferOptions.AddRawSettings("EncryptNewFiles", "1");
        $transferOptions.AddRawSettings("SendBuf", "0");
 
        $transferOptions.ResumeSupport.State = [WinSCP.TransferResumeSupportState]::Off
        $transferOptions.FilePermissions = $Null # This is default
        $transferOptions.PreserveTimestamp = $False
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
        $transferOptions.OverwriteMode = [WinSCP.OverwriteMode]::Overwrite
       
        ## copy file to SFTP
        $allFiles = -join($filepath,"*")
        $transferResult = $session.PutFiles($allFiles,$remotePath,$False,$transferOptions);
        $transferResult.Check();
       
        ##close connection
        $Session.Close()
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose();
    }
 
    $FinishedMailParams= @{
        To = 'ToEmail'
        From = 'FromEmail'
        Port = ''
        SmtpServer = 'SMTPServer'
        Subject = 'SUBJECT'
        Body = "EMAIL BODY"
    }
 
    Send-MailMessage @FinishedMailParams;
}
catch
{
    ## send email
    $ErrorMailParams = @{
        To = 'ToEmail'
        From = 'FromEmail'
        Port = ''
        SmtpServer = 'SMTPServer'
        Subject = 'SUBJECT'
        Body = "Error: $($_.Exception.Message)"
    }
 
    Send-MailMessage @ErrorMailParams;
}