Kann ich mit dem WinSCP-Skript eine Durchsatzgeschwindigkeit erzielen?

Kann ich mit dem WinSCP-Skript eine Durchsatzgeschwindigkeit erzielen?

Ich sehe, dass beim Ausführen meines Skripts der Durchsatz während des Herunterladens ausgegeben wird. Gibt es eine Möglichkeit, die Gesamtdurchsatzgeschwindigkeit der Datei nach dem Herunterladen abzurufen?

Mein Skript:

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

Skript.txt

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

Antwort1

Sie können es selbst berechnen.

Ich würde Ihnen empfehlen,Konvertieren Sie Ihr Skript in ein PowerShell-Skript, das die WinSCP .NET-Assembly verwendet.

Dann können Sie sich vor und nach dem Anruf Zeit nehmen, um dieSession.GetFilesund berechne die Geschwindigkeit:

$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)

Das vollständige Skript finden Sie weiter unten. Es basiert auf demoffizielles PowerShell-Beispiel für WinSCP.NET-Assembly.

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
}

verwandte Informationen