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: Connection has been unexpectedly closed. Server sent command exit status 0, winscp with powershell

Please attach a full session log file showing the problem (using the latest version of WinSCP).

To generate the session log file, set Session.SessionLogPath. Submit the log with your post as an attachment. Note that passwords and passphrases not stored in the log. You may want to remove other data you consider sensitive though, such as host names, IP addresses, account names or file names (unless they are relevant to the problem). If you do not want to post the log publicly, you can mark the attachment as private.
tvpatil

Connection has been unexpectedly closed. Server sent command exit status 0, winscp with powershell

i am getting below error to automate the synchronization of files remote to local, please help on this error...
error:Connection has been unexpectedly closed. Server sent command exit status 0.

param (
$localPath = "xxxxx",
$remotePath = "xxxxx"
)

try
{# Load WinSCP .NET assembly
Add-Type -Path "C:\WinScp\winscp577automation\WinSCPnet.dll"

# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
HostName = "xyz.com"
PortNumber=xxxx
UserName = "username"
Password = "password"
SshHostKeyFingerprint = "ssh-rsa 4096 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

$session = New-Object WinSCP.Session

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

# Synchronize files to local directory, collect results
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Local, $localPath, $remotePath, $False)

# Deliberately not calling $synchronizationResult.Check
# as that would abort our script on any error.
# We will find any error in the loop below
# (note that $synchronizationResult.Downloads is the only operation
# collection of SynchronizationResult that can contain any items,
# as we are not removing nor uploading anything)

# Iterate over every download
foreach ($download in $synchronizationResult.Downloads)
{
# Success or error?
if ($download.Error -eq $Null)
{
Write-Host ("Download of {0} succeeded, removing from source" -f
$download.FileName)
# Download succeeded, remove file from source
$removalResult = $session.RemoveFiles($session.EscapeFileMask($download.FileName))

if ($removalResult.IsSuccess)
{
Write-Host ("Removing of file {0} succeeded" -f
$download.FileName)
}
else
{
Write-Host ("Removing of file {0} failed" -f
$download.FileName)
}
}
else
{
Write-Host ("Download of {0} failed: {1}" -f
$download.FileName, $download.Error.Message)
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}

exit 0
}
catch [Exception]
{
Write-Host ("Error: {0}" -f $_.Exception.Message)
exit 1
}