¿Puedo obtener velocidad de rendimiento de WinSCP Script?

¿Puedo obtener velocidad de rendimiento de WinSCP Script?

Veo que cuando ejecuto mi script, genera el rendimiento mientras se descarga. ¿Hay alguna manera de obtener la velocidad de rendimiento total del archivo después de descargarlo?

Mi guión:

WinSCP.exe /console /script=script.txt /log=my_log.log > output

Guión.txt

option batch abort
option confirm off
open IMC
get "/home/ftp/download/01_MBytes.txt" "C:\downloads\01_MBytes.txt"
exit

Respuesta1

Puedes calcularlo tú mismo.

Te sugiero queconvierta su secuencia de comandos a una secuencia de comandos de PowerShell que utilice el ensamblado WinSCP .NET.

Luego puedes tomarte un tiempo antes y después de la llamada alSession.GetFilesy calcula la velocidad:

$remotePath = "/home/ftp/download/01_MBytes.txt"
$localPath = "C:\downloads\01_MBytes.txt"

Write-Host "Starting download"
$start = Get-Date
$session.GetFiles($remotePath, $localPath).Check()
$duration = (Get-Date) - $start
$size = (Get-Item $localPath).Length / 1024
$speed = $size / $duration.TotalSeconds

Write-Host "Downloaded file $remotePath to $localPath"
Write-Host ("Size {0:N0} KB, Time {1:hh\:mm\:ss}" -f $size, $duration)
Write-Host ("Speed {0:N0} KB/s" -f $speed)

Un guión completo está a continuación. Se basa en elEjemplo oficial de PowerShell para el ensamblaje de WinSCP.NET.

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "WinSCPnet.dll"

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
    $sessionOptions.HostName = "example.com"
    $sessionOptions.UserName = "user"
    $sessionOptions.Password = "mypassword"
    $sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="

    $session = New-Object WinSCP.Session

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

        $remotePath = "/home/ftp/download/01_MBytes.txt"
        $localPath = "C:\downloads\01_MBytes.txt"

        Write-Host "Starting download"
        $start = Get-Date
        $session.GetFiles($remotePath, $localPath).Check()
        $duration = (Get-Date) - $start
        $size = (Get-Item $localPath).Length / 1024
        $speed = $size / $duration.TotalSeconds

        Write-Host "Downloaded file $remotePath to $localPath"
        Write-Host ("Size {0:N0} KB, Time {1:hh\:mm\:ss}" -f $size, $duration)
        Write-Host ("Speed {0:N0} KB/s" -f $speed)
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch [Exception]
{
    Write-Host $_.Exception
    exit 1
}

información relacionada