当单个文件上载失败时,使用WinSCP .NET程序集上传的批处理文件会停止

时间:2017-05-25 09:39:27

标签: powershell file-upload ftp winscp winscp-net

我使用WinSCP连接到FTP并上传了一堆文件,但是当文件无法上传时,遇到问题,脚本停止时会出现问题,以及以下文件没有&# 39;上传。我主要使用WinSCP's documentation

中的代码
# Conectar
$session.Open($sessionOptions)

#Upload files
$transferResult = $session.PutFiles($origenSubida, $destinoSubida)

# Resultados de cada archivo
foreach ($transfer in $transferResult.Transfers)
{
    #looks if upload is correct
    if ($transfer.Error -eq $Null)
    {
        LogWrite ("$(Get-Date) upload complete {0} , changing folder" -f $transfer.FileName) 
        Move-Item $transfer.FileName $rutaArchivos
    }
    else
    {
        LogWrite ("$(Get-Date) Upload of {0} has failed: {1}" -f $transfer.Filename, $transfer.Error.Message)
    }
}

出乎意料的表现如下:

我上传的文件夹中有4个文件,文件1,2,3和4,如果我从文件3中删除所有权限并运行脚本,则文件1和2上传到FTP并将它们移动到另一个目录,然后脚本以文件3的无权限错误结束,文件4不上传。

我不确定我是否忽视了任何内容,即使它无法对file3做任何事情,该脚本是否应该继续?我不确定是否有另一种方法可以让单个文件上传失败。

1 个答案:

答案 0 :(得分:0)

如果您想要自定义错误处理,则必须自行循环文件。

$localPath = "C:\local\path"
$remotePath = "/remote/path/"

$localFiles = Get-ChildItem -Path $localPath

foreach ($localFile in $localFiles)
{
    Write-Host "Uploading $($localFile.FullName)..."
    $sourcePath = [WinSCP.RemotePath]::EscapeFileMask($localFile.FullName)
    $transferResult = $session.PutFiles($sourcePath, $remotePath)

    if (!$transferResult.IsSuccess)
    {
        # Print error (but continue with other files)
        Write-Host ("Error upload file $($localFile.FullName): " +
            "$($transferResult.Failures[0].Message)")
    }    
}

Recursively download directory tree with custom error handling的官方示例类似。